पॉवरशेल स्क्रिप्ट में "प्रतीक्षा" कमांड जोड़ने की आवश्यकता है


39

यहाँ मेरा वर्तमान कोड है:

Write-output ENTER THE FOLLOWING DETAILS - When Creating Multiple New Accounts Go to           EMC hit F5(refresh) and make sure previous new account is listed before proceeding to the       next one
$DName = Read-Host User Diplay Name(New User)"
$RUser = Read-Host "Replicate User(Database Grab)"
$RData = ((Get-Mailbox -Identity $RUser).Database).DistinguishedName
$REmailInput = Read-Host “Requester's Name(Notification Email goes to this Person)"
$REmail = ((Get-Mailbox -Identity "$REmailInput").PrimarySmtpAddress).ToString()

Enable-Mailbox -Identity "$DName" -Database "$RData" 
Set-CASMailbox -Identity "$DName" -ActiveSyncEnabled $false -ImapEnabled $false -    PopEnabled $false


Send-MailMessage -From "John Doe <John.Doe@xyz.com>" -To $REmail -Subject       "$DName's email account" -Body "$DName's email account has been setup.`n`n`nJohn Doe`nXYZ`nSystems Administrator`nOffice: 123.456.7890`nJohn.Doe@xyz.com" -SmtpServer exchange@xyz.com

यह कोड लगभग आधे समय तक त्रुटिपूर्ण काम करता है, लेकिन दूसरे आधे हिस्से में मुझे यह त्रुटि मिलती है:

ENTER THE FOLLOWING DETAILS - When Creating Multiple New Accounts Go to EMC hit
F5(refresh) and make sure previous new account is listed before proceeding to
the next one
User Diplay Name(New User): Jane Doe
Replicate User(Database Grab): Julie Doe
Requester's Name(Notification Email goes to this Person): Joanna Doe

Name                      Alias                ServerName       ProhibitSendQuo
                                                            ta
----                      -----                ----------       ---------------
Jane Doe                  JDDAFA               exchange@xyz.com      unlimited
Set-CASMailbox : Jane Doe is not a mailbox user.
At C:\emailclientbasic.ps1:11 char:15
+ Set-CASMailbox <<<<  -Identity "$DName" -ActiveSyncEnabled $false -ImapEnable
d $false -PopEnabled $false
+ CategoryInfo          : NotSpecified: (0:Int32) [Set-CASMailbox], Manage
mentObjectNotFoundException
+ FullyQualifiedErrorId : 292DF1AC,Microsoft.Exchange.Management.Recipient
Tasks.SetCASMailbox

इसलिए यदि कोई मेलबॉक्स बनाने के बाद मुझे किसी प्रकार की प्रतीक्षा कमांड में फेंकने में मदद कर सकता है और तब तक प्रतीक्षा करें जब तक कि उपयोगकर्ता मेलबॉक्स को सक्रिय करने से पहले स्क्रिप्ट को सक्रिय नहीं करता है, आदि यह वास्तव में उपयोगी होगा। मेरा मानना ​​है कि बस -विट स्विच का उपयोग करने से काम नहीं चलता है।

जवाबों:


90

Start-Sleepकमांड का उपयोग करें :

Start-Sleep -s 10

10 सेकंड के लिए स्क्रिप्ट को रोक देगा।


धन्यवाद स्वेन! मैं बहुत अच्छी तरह से इसका इस्तेमाल कर सकता हूं, लेकिन जब मैं कई खाते जोड़ रहा हूं, तो मैं विशेष रूप से कुछ अधिक कुशल होना चाहूंगा। इसके अलावा, पहली बार में इस समस्या की प्रकृति यह है कि हर बार एक्सचेंज मेल खाते को सक्षम करने के लिए अलग-अलग समय होता है, इसलिए यह तथ्य है कि यह समय के ठीक आधे हिस्से में काम करता है।
पॉल मेसेक

5
मैं एक्सचेंज का उपयोग नहीं करता हूं, इसलिए मैं इस बारे में cmdlets से परिचित नहीं हूं, लेकिन मैं क्या करूंगा एक कमांड को खोजने की कोशिश कर रहा हूं जो जांचता है कि क्या संसाधन मौजूद है और यदि नहीं, तो मौजूद होने तक एक होल्डिंग चक्र में चला जाता है। कुछ इस तरह से: while ( res-not-exist ) { Start-Sleep -s 1}इस तरह से, आप स्क्रिप्ट को केवल तब तक रोकते हैं जब तक यह आवश्यक हो और केवल तभी आवश्यक हो।
स्वेन

वाह! हाँ, मैं सहमत हूँ कि जाने के लिए एक शानदार तरीका लगता है! किसी और को स्वेन के विचार से जोड़ सकते हैं? क्या यह एक संभव तरीका है?
पॉल मेसेक

मैं अभी आपके प्रारंभिक सुझाव का अस्थायी रूप से उपयोग कर रहा हूं ... +1 मैंने इसे 5 सेकंड में बदल दिया और यह पर्याप्त प्रतीत होता है।
पॉल मेसेक

8

मुझे थोड़ी देर पहले लिखी गई एक एक्सचेंज स्क्रिप्ट में कुछ समय से निपटना था। विशेष रूप से, मुझे एक नए बनाए गए वितरण समूह पर अनुमतियों को संशोधित करने की आवश्यकता थी, लेकिन इसे संशोधित करने के प्रयास से पहले वितरण-समूह को वास्तव में बनाए जाने तक प्रतीक्षा करने की आवश्यकता थी।

do {
    sleep -seconds 1
    $mailboxExists = get-mailboxpermission -Identity "CN=$displayName,$DN" -User "NT AUTHORITY\SELF" -ErrorAction SilentlyContinue |fw IsValid
    write-host "." -nonewline
} while (!$mailboxExists)

यह "मेलबॉक्स मौजूद है" के लिए प्रॉक्सी के रूप में (इस उदाहरण में) मेलबॉक्स से "IsValid" विशेषता को प्राप्त करने का प्रयास करता है। एक बार get-mailboxpermissionसही होने के बाद, अगला कदम, अनुमति देना वास्तव में काम करेगा। write-hostसिर्फ एक प्रगति बार प्रदान करना है।


हम्म, वाह, धन्यवाद sysadmin1138! ऐसा लगता है कि आपकी स्थिति बिल्कुल मेरी है, इसलिए इसे सैद्धांतिक रूप से w / oa अड़चन का काम करना चाहिए। मैं यह भी कोशिश करेंगे!
पॉल मेसेक

@Paul मैंने स्टैटिक वेट के साथ शुरू किया था, लेकिन एक्सचेंज सिस्टम को अन्य चीजों के साथ कैसे लोड किया जाता है, इस पर निर्भर वास्तविक इंतजार की जरूरत है। इसलिए मुझे इसके साथ गतिशील होना पड़ा, जो बहुत बेहतर काम करता है!
sysadmin1138

मैं पूरी तरह से सहमत हूं, जैसा कि आप मेरी आरंभिक प्रतिक्रियाओं @Bret फिशर और @SvenW से देखेंगे, यह मेरी बिल्कुल वैसी ही स्थिति है।
पॉल मेसेक

मैं अब यह कोशिश कर रहा हूं, क्या शुरुआत एक चर माना जाता है या यह शुरुआत में $ नहीं होना चाहिए और एक कमांड होना चाहिए? यह काम नहीं कर रहा है। अभी के रूप में मेरे पास मेरे "Enable-Mailbox -Identity" $ DName "-Database" $ RData "लाइन से ठीक पहले डाला गया कोड है।
पॉल मैस्क

मैंने "सक्षम-मेलबॉक्स ..." के बाद भी इसे ठीक से आज़माया और यही त्रुटि मिली, "शब्द 'असत्य' को किसी cmdlet, function, script fi le या ऑपरेबल प्रोग्राम के नाम के रूप में मान्यता प्राप्त नहीं है। वर्तनी की जाँच करें। नाम, या यदि कोई रास्ता असंगत था, तो सत्यापित करें कि पथ सही है और पुन: प्रयास करें। C: \ emailclientbasic.ps1: 18 char: 23 + $ मेलबॉक्सप्रतिष्ठित = झूठा <<<< + श्रेणीवार: ObjectototFound: (false: स्ट्रिंग) [], CommandNotFou ndException + FullQualifiedErrorId: CommandNotFoundException "
पॉल मेसेक

3

आप इसे पृष्ठभूमि की नौकरी के रूप में चला सकते हैं और फिर उस नौकरी के समाप्त होने की प्रतीक्षा कर सकते हैं। ऐशे ही:

$ सक्षम = स्टार्ट-जॉब {इनेबल-मेलबॉक्स -Identity "$ DName" -डाटबेस "$ RData"}
प्रतीक्षा-नौकरी $ सक्षम प्राप्तकर्ता
-नौकरी $ सक्षम


धन्यवाद जेसन! मैं इसे देखना शुरू करने जा रहा हूं और देखूंगा कि मैं इसके साथ क्या कर सकता हूं।
पॉल मेसेक

मैंने अपनी सक्षम-मेलबॉक्स लाइन पर टिप्पणी करने और आपकी अनुशंसा को प्रतिस्थापित करने का प्रयास किया। मुझे यह त्रुटि मिली, "शब्द 'Enable-Mailbox' को किसी cmdlet, function, script फ़ाइल या ऑपरेबल प्रोग्राम के नाम के रूप में नहीं पहचाना जाता है। नाम की वर्तनी की जाँच करें, या यदि कोई पथ शामिल किया गया था, तो पथ को सत्यापित करें। सही है और पुन: प्रयास करें + CategoryInfo: ObjectNotFound: (सक्षम-मेलबॉक्स: स्ट्रिंग) [], कॉम andNotFoundException + FullyQualifiedErrorId: CommandNotFoundException "।
पॉल Masek

1

प्रारंभ-नींद = प्रतीक्षा x सेकंड

http://technet.microsoft.com/en-us/library/ee177002.aspx


धन्यवाद ब्रेट, लेकिन जैसा कि मैंने स्वेन को बताया, मैं वास्तव में आगे बढ़ने के लिए एक अधिक बुद्धिमान कमांड की तलाश कर रहा हूं जब खाता मेल-सक्षम किया गया हो। एक स्थिर प्रतीक्षा समय मेरी स्थिति में मदद नहीं करेगा।
पॉल मेसेक

1

ऐसा कुछ क्यों नहीं:

do {
$testpath = Test-Path -path \\dns2\d$\test
}
until ($testpath -eq $true)

मैं start-sleepप्रारंभिक परीक्षण के बाद एक अतिरिक्त के साथ इस प्रकार की कमांड का उपयोग करता हूं क्योंकि जब तक इसके बिना बहुत सारे प्रोसेसर चक्र नहीं खाते हैं। तो मेरा इस तरह से अधिक लग रहा है:

do {
$testpath = Test-Path -path \\dns2\d$\test
start-sleep -s 10}
until ($testpath -eq $true)

यदि परीक्षण जल्दी से स्थिति बदलने जा रहा है, तो चिंता न करें start-sleep

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.