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


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

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

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


36
2018-05-17 14:42


मूल




जवाब:


उपयोग Start-Sleep आदेश:

Start-Sleep -s 10

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


77
2018-05-17 14:45



धन्यवाद स्वेन! मैं इसका बहुत अच्छा उपयोग कर सकता हूं, लेकिन मैं कुछ और कुशल बनाना चाहता हूं खासकर जब मैं एकाधिक खातों को जोड़ रहा हूं। इसके अलावा, पहली बार इस समस्या की प्रकृति यह है कि प्रत्येक बार जब एक्सचेंज मेल खाते सक्षम करता है तो अलग-अलग समय होते हैं, इसलिए तथ्य यह है कि यह समय के आधा काम करता है। - Paul Masek
मैं एक्सचेंज का उपयोग नहीं करता, इसलिए मैं इसके बारे में cmdlets से परिचित नहीं हूं, लेकिन मैं जो करता हूं वह एक कमांड खोजने की कोशिश कर रहा है जो जांचता है कि संसाधन मौजूद है और यदि नहीं, तब तक होल्डिंग चक्र में तब तक चला जाता है जब तक यह अस्तित्व में न हो। कुछ इस तरह: while ( res-not-exist ) { Start-Sleep -s 1} इस तरह, आप केवल तब तक स्क्रिप्ट को रोकते हैं जब तक यह आवश्यक हो और केवल तभी आवश्यक हो। - Sven♦
वाह! हाँ मैं सहमत हूं कि जाने के लिए एक शानदार तरीका लगता है! क्या कोई और स्वेन के विचार में जोड़ सकता है? क्या यह जाने का एक व्यवहार्य तरीका है? - Paul Masek
मैं अस्थायी रूप से आपके शुरुआती सुझाव का उपयोग कर रहा हूं ... +1 मैंने इसे 5 सेकंड में बदल दिया और ऐसा लगता है कि यह पर्याप्त है। - Paul Masek


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

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 सिर्फ एक प्रगति पट्टी प्रदान करने के लिए है।


8
2018-05-17 17:51



हम्म, वाह, धन्यवाद sysadmin1138! ऐसा लगता है कि आपकी स्थिति मेरे समानांतर है, इसलिए सैद्धांतिक रूप से सैद्धांतिक रूप से काम करना चाहिए। मैं भी कोशिश करूँगा! - Paul Masek
@ पॉल मैंने स्थिर प्रतीक्षा के साथ शुरुआत की, लेकिन वास्तविक प्रतीक्षा की आवश्यकता है कि एक्सचेंज सिस्टम को अन्य चीजों के साथ कैसे लोड किया गया था। तो मुझे इसके साथ गतिशील जाना पड़ा, जो बहुत बेहतर काम करता है! - sysadmin1138♦
मैं पूरी तरह से सहमत हूं, जैसा कि आप @ प्रारंभिक प्रतिक्रियाओं से @ ब्रेट फिशर और @ स्वेनडब्लू में देखेंगे, यह वही स्थिति है। - Paul Masek
मैं अब यह कोशिश कर रहा हूं, क्या शुरुआत एक परिवर्तनीय होने वाली है या क्या शुरुआत में $ $ नहीं होना चाहिए और कमांड होना चाहिए? यह काम नहीं कर रहा है। अभी तक मेरे कोड को "सक्षम-मेलबॉक्स -इडेन्टिटी" $ DName "-डेटाबेस" $ RData "लाइन से ठीक पहले डाला गया है। - Paul Masek
मैंने इसे "सक्षम-मेलबॉक्स ..." के ठीक बाद भी कोशिश की और यह वही त्रुटि मिली, "शब्द 'झूठी' को cmdlet, function, script fi le, या ऑपरेट करने योग्य प्रोग्राम के नाम के रूप में पहचाना नहीं गया है। वर्तनी की जांच करें नाम, या यदि कोई पथ समर्पित है, तो सत्यापित करें कि पथ सही है और पुनः प्रयास करें। C: \ emailclientbasic.ps1: 18 char: 23 + $ mailboxExists = false <<<< + Categoryइन्फो: ऑब्जेक्ट नॉटफाउंड: (झूठी: स्ट्रिंग) [], कमांड नॉटफू एनएंडएक्सप्शन + फुलली क्वालिफाइड एरर आईडी: कमांड नॉटफाउंड अपवाद " - Paul Masek


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

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


3
2018-05-17 16:03



धन्यवाद जेसन! मैं इसे देखने शुरू कर रहा हूं और देख सकता हूं कि मैं इसके साथ क्या कर सकता हूं। - Paul Masek
मैंने अपनी सक्षम-मेलबॉक्स लाइन पर टिप्पणी करने और आपकी सिफारिश को प्रतिस्थापित करने का प्रयास किया। मुझे यह त्रुटि मिली, "'सक्षम-मेलबॉक्स' शब्द को cmdlet, फ़ंक्शन, स्क्रिप्ट फ़ाइल या ऑपरेट करने योग्य प्रोग्राम के नाम के रूप में पहचाना नहीं गया है। नाम की वर्तनी जांचें, या यदि पथ शामिल किया गया है, तो पथ को सत्यापित करें सही है और पुनः प्रयास करें। + Categoryइन्फो: ऑब्जेक्ट नॉटफाउंड: (सक्षम-मेलबॉक्स: स्ट्रिंग) [], कम और नॉटफाउंड अपवाद + पूरी तरह से योग्यता त्रुटि: कमांड नॉटफाउंड अपवाद " - Paul Masek


स्टार्ट-स्लीप = एक्स सेकंड प्रतीक्षा करें

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


1
2018-05-17 14:48



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


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

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


1
2018-02-25 02:18