Powershell 스크립트에 "대기"명령을 추가해야합니다.


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

따라서 누군가 사서함을 만든 후 일종의 대기 명령을 던지고 스크립트가 ActiveSync를 비활성화하기 전에 사용자의 사서함이 생성 될 때까지 기다릴 수 있다면 실제로 도움이 될 것입니다. 단순히 -wait 스위치를 사용하면 작동하지 않는다고 생각합니다.

답변:


90

다음 Start-Sleep명령을 사용하십시오 .

Start-Sleep -s 10

10 초 동안 스크립트를 일시 중지합니다.


감사합니다 스벤! 나는 이것을 잘 사용할 수 있지만 여러 계정을 추가 할 때 특히 효율적인 것을 원합니다. 또한 처음부터이 문제의 특성은 Exchange 메일에서 계정을 사용할 수있게 될 때마다 시간이 다르기 때문에 절반의 시간 동안 제대로 작동한다는 사실입니다.
Paul Masek

5
Exchange를 사용하지 않으므로 이에 관한 cmdlet에 익숙하지 않지만 리소스가 존재하는지 여부를 확인하고 존재하지 않을 때까지 보류 주기로 들어가는 명령을 찾으려고합니다. 다음과 같은 방법 : while ( res-not-exist ) { Start-Sleep -s 1}이 방법으로 스크립트는 필요한 기간 동안 만 필요한 경우에만 중지합니다.
Sven

와! 네, 좋은 방법이라고 생각합니다! 다른 사람이 Sven의 아이디어에 추가 할 수 있습니까? 이것이 가능한 방법입니까?
Paul Masek

나는 현재 귀하의 초기 제안을 일시적으로 사용하고 있습니다 ... +1 5 초로 변경했는데 충분합니다.
Paul Masek

8

얼마 전에 작성한 Exchange 스크립트에서 타이밍을 처리해야했습니다. 특히 새로 만든 메일 그룹에 대한 권한을 수정해야했지만 메일 그룹을 실제로 만들 때까지 기다려야 수정을 시도했습니다.

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-mailboxpermissiontrue를 반환하면 다음 단계 인 권한 설정이 실제로 작동합니다. 는 write-host단지 진행률 표시 줄을 제공하는 것입니다.


흠, sysadmin1138 감사합니다! 그것은 상황이 광산과 정확히 일치하는 것처럼 보이므로 이론적으로 장애가 발생하지 않아야합니다. 나는 이것을 시도 할 것이다!
Paul Masek

@Paul 정적 대기로 시작했지만 실제로 필요한 대기 시간은 Exchange 시스템이 다른 것들과 어떻게로드되었는지에 달려 있습니다. 그래서 나는 그것으로 역동적으로 가야했습니다.
sysadmin1138

@Bret Fisher 및 @SvenW에 대한 나의 초기 응답에서 알 수 있듯이, 그것은 정확히 같은 상황입니다.
Paul Masek

나는 이것을 지금 시도하고 있는데 시작은 변수이거나 시작에 $가 없어야하며 명령이어야합니까? 그대로 작동하지 않습니다. 지금 현재 나는 당신의 코드는 바로 내 "사용 사서함 -Identity"$ DNAME "-Database"$ RData에 "라인 앞에 삽입했다.
폴 Masek

또한 "Enable-Mailbox ..."바로 다음에 시도했지만 "false"라는 용어는 cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램의 이름으로 인식되지 않습니다. C. \ emailclientbasic.ps1 : 18 char : 23 + $ mailboxExists = false <<<< + CategoryInfo : ObjectNotFound : (거짓 : String) [], CommandNotFou ndException + FullyQualifiedErrorId : CommandNotFoundException "
Paul Masek

3

백그라운드 작업으로 실행 한 다음 해당 작업이 완료 될 때까지 기다릴 수 있습니다. 이처럼 :

$ enablemb = 시작 작업 {Enable-Mailbox -ID "$ DName"-데이터베이스 "$ RData"}
대기 작업 $ enablemb
수신 작업 $ enablemb


고마워 Jason! 나는 이것을 조사하기 시작하고 그것으로 무엇을 할 수 있는지 볼 것이다.
Paul Masek

Enable-mailbox 줄을 주석 처리하고 권장 사항을 대체하려고했습니다. " 'Enable-Mailbox'라는 용어는 cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램의 이름으로 인식되지 않습니다. 이름의 철자를 확인하거나 경로가 포함 된 경우 경로를 확인하십시오. + CategoryInfo : ObjectNotFound : (Enable-Mailbox : String) [], Comm andNotFoundException + FullyQualifiedErrorId : CommandNotFoundException "
Paul Masek


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.