পাওয়ারশেল স্ক্রিপ্টে একটি "অপেক্ষা করুন" কমান্ড যুক্ত করা দরকার


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

এই কোডটি প্রায় অর্ধেক সময় নির্বিঘ্নে কাজ করে, তবে বাকী অর্ধেকের মধ্যে আমি এই ত্রুটিটি পেয়েছি return

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
আমি এক্সচেঞ্জ ব্যবহার করি না, তাই আমি এই সম্পর্কিত সেমিডলেটগুলির সাথে পরিচিত নই, তবে আমি কী করব এমন একটি কমান্ড সন্ধান করার চেষ্টা করছে যা উত্সটি বিদ্যমান কিনা তা পরীক্ষা করে এবং এটি উপস্থিত না হওয়া অবধি একটি হোল্ডিং চক্রের মধ্যে যায় goes এর মতো কিছু: while ( res-not-exist ) { Start-Sleep -s 1}এইভাবে, আপনি স্ক্রিপ্টটি কেবল যতক্ষণ প্রয়োজন ততক্ষণ বন্ধ করুন এবং কেবল এটি প্রয়োজনীয় হলে।
সোভেন

কি দারুন! হ্যাঁ আমি সম্মত হলাম যে দুর্দান্ত উপায়গুলি যাওয়ার মতো! অন্য কেউ কি সোভেনের ধারণাকে যুক্ত করতে পারে? এটি কি একটি সম্ভাব্য উপায়?
পল মাসেক 15'13

আমি আপাতত আপনার প্রাথমিক পরামর্শটি ব্যবহার করছি ... +1 আমি এটিকে 5 সেকেন্ডে পরিবর্তন করেছি এবং এটি যথেষ্ট বলে মনে হচ্ছে be
পল মাশেক

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)

এটি কেবল "মেসবক্স বিদ্যমান" এর প্রক্সি হিসাবে মেলবক্সের ("উদাহরণস্বরূপ)" ইসভালিড "বৈশিষ্ট্যটি বন্ধ করার চেষ্টা করে। একবার get-mailboxpermissionসত্য হয়ে গেলে , পরবর্তী পদক্ষেপে, অনুমতি নির্ধারণ করা আসলে কাজ করবে। এটি কেবল write-hostএকটি অগ্রগতি বার সরবরাহ করা।


হুম, বাহ, ধন্যবাদ sysadmin1138! দেখে মনে হচ্ছে আপনার পরিস্থিতি আমার সাথে একেবারে সমান্তরাল তাই এটি তাত্ত্বিকভাবে ডাব্লু / ওএ এইচচিকিত্সার কাজ করা উচিত। আমি এটিও চেষ্টা করব!
পল মাশেক

@ পল আমি স্ট্যাটিক ওয়েটস দিয়ে শুরু করেছি, তবে এক্সচেঞ্জ সিস্টেমটি অন্যান্য জিনিসগুলির সাথে কীভাবে বোঝা হয়েছিল তার উপর প্রকৃত অপেক্ষা নির্ভর করে। সুতরাং আমি এটি নিয়ে গতিশীল যেতে হয়েছিল, যা আরও ভাল কাজ করে!
sysadmin1138

আমি সম্পূর্ণরূপে একমত, যেমন আপনি @ ব্রেট ফিশার এবং @ স্পেনডাব্লুয়ের প্রতি আমার প্রাথমিক প্রতিক্রিয়াগুলি থেকে দেখবেন, ঠিক একই অবস্থা আমার।
পল ম্যাসেক

আমি এখন এটি চেষ্টা করছি, শুরুটি কি ভেরিয়েবল হিসাবে বিবেচনা করা উচিত বা এর শুরুতে have থাকা উচিত নয় এবং কমান্ড হওয়া উচিত? এটি যেমন চলছে তেমন কাজ করছে না। এখনই আমার নিজের কোডটি আমার "সক্ষম-মেইলবক্স-পরিচয়" $ DName "-ডাটাবেস" $ আরডিটা "লাইনের ঠিক আগে sertedোকানো হয়েছে
পল মাসেক

আমি "সক্ষম-মেলবক্স ..." এর ঠিক পরে এটি চেষ্টা করেছি এবং এই একই ত্রুটিটি পেয়েছি, "'মিথ্যা' শব্দটি একটি সেমিডলেট, ফাংশন, স্ক্রিপ্ট ফাই লে বা অপারেবল প্রোগ্রামের নাম হিসাবে স্বীকৃত নয় of এর বানানটি পরীক্ষা করুন নাম, বা যদি কোনও পথ অন্তর্ভুক্ত থাকে, তবে পাথটি সঠিক কিনা তা যাচাই করুন এবং আবার চেষ্টা করুন C স্ট্রিং) [], কমান্ডনটফৌ এনডেপশন + ফুললিউলিফাইড এরিওরআইডি: কমান্ডনটফাউন্ডএক্সেপশন "
পল ম্যাসেক

3

আপনি এটিকে ব্যাকগ্রাউন্ড কাজ হিসাবে চালাতে পারেন এবং তারপরে সেই কাজটি শেষ হওয়ার জন্য অপেক্ষা করুন। এটার মত:

$ সক্ষমবি = স্টার্ট-জব {সক্ষম-মেলবক্স-পরিচয় "$ ডিএনএইম" -ডেটব্যাক্স "$ আরডিটা" it
অপেক্ষা-কাজ $ সক্ষমব
-রিসিভ-জব $ সক্ষম


ধন্যবাদ জেসন! আমি এটি সন্ধান শুরু করব এবং এটি দিয়ে আমি কী করতে পারি তা দেখুন।
পল মাসেক

আমি আমার সক্ষম-মেলবক্স লাইনটি মন্তব্য করার চেষ্টা করেছি এবং আপনার প্রস্তাবটি প্রতিস্থাপন করেছি। আমি এই ত্রুটিটি পেয়েছি, "শব্দটি 'সক্ষম করুন-মেলবক্স' একটি সেমিডলেট, ফাংশন, স্ক্রিপ্ট ফাইল বা অপারেবল প্রোগ্রামের নাম হিসাবে স্বীকৃত নয় name নামের বানানটি পরীক্ষা করুন, বা কোনও পথ অন্তর্ভুক্ত করা থাকলে, সেই পথটি যাচাই করুন সঠিক এবং আবার চেষ্টা করুন + + CategoryInfo: ObjectNotFound: (Enable-মেলবক্স: স্ট্রিং) [], Comm andNotFoundException + + FullyQualifiedErrorId: CommandNotFoundException "।
পল Masek

1

সূচনা-ঘুম = এক্স সেকেন্ড অপেক্ষা করুন

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


ধন্যবাদ ব্রেট, তবে আমি সুইভেনকে বলেছিলাম, যখন অ্যাকাউন্টটি মেইল-সক্ষম হয়ে গেছে তখন আমি আরও বুদ্ধিমান কমান্ডের সন্ধান করছি actually একটি স্থিতিশীল অপেক্ষা সময় আমার পরিস্থিতিতে সাহায্য করবে না।
পল ম্যাসেক

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.