PowerShell if/else语句似乎暂停
我有一个PowerShell脚本,它基本上是用于迁移数据的队列。基本上,该脚本将通过一个调查问卷,并根据调查问卷创建成批的命令。所有这些工作都很好,它正在执行我遇到问题的迁移 在本例中,我一次迁移9个LUN。一旦unix系统报告这9个LUN已完成(而不是正在进行零迁移),它将删除旧LUN并启动新的批处理,直到完成 以下是我认为我一直坚持的代码:PowerShell if/else语句似乎暂停,powershell,if-statement,Powershell,If Statement,我有一个PowerShell脚本,它基本上是用于迁移数据的队列。基本上,该脚本将通过一个调查问卷,并根据调查问卷创建成批的命令。所有这些工作都很好,它正在执行我遇到问题的迁移 在本例中,我一次迁移9个LUN。一旦unix系统报告这9个LUN已完成(而不是正在进行零迁移),它将删除旧LUN并启动新的批处理,直到完成 以下是我认为我一直坚持的代码: function Execute_AddVdisk { $FileCount = 1 $vDiskNames = Get-Content
function Execute_AddVdisk {
$FileCount = 1
$vDiskNames = Get-Content $WorkingDir\vDiskNames.txt
$date = Get-Date
Write-Output "$date - vDisk copy starting..." | Out-File $WorkingDir\log.txt -Encoding Ascii -Append
Write-Output "`n" | Out-File $WorkingDir\log.txt -Encoding ascii -Append
Execute_AddVdisk-Continue
}
function Execute_AddVdisk-Continue {
if (Test-Path $WorkingDir\migrate_vdisks-$FileCount.txt) {
$date = Get-Date
Write-Host "Adding vDisk copies. Executing file $WorkingDir\migrate_vdisks-$FileCount.txt"
Write-Output "$date - Executing file $WorkingDir\migrate_vdisks-$FileCount.txt" | Out-File $WorkingDir\log.txt -Encoding Ascii -Append
CMD.EXE /C "ssh user@$svc -i PathToKey -m $WorkingDir\migrate_vdisks-$FileCount.txt"
Delete_vDisks
} else {
Write-Host "All migrations are complete. Exiting."
Send-MailMessage -From "someone@somewhere.com" -To "someone@somewhere.com" -Subject "Something" -Body "Some Stuff" -Attachments "somelog" -SmtpServer somemailserver
Set-Location C:\
Remove-Item -Path $WorkingDir -Recurse
exit
}
}
function Delete_vDisks {
$SessionCopies = @()
$AllvDiskCopies = CMD.EXE /C "ssh user@$svc -i PathToKey lsvdisksyncprogress -delim ," | ConvertFrom-Csv
if ($AllvDiskCopies -eq $null) {
$date = Get-Date
Write-Host "Deleting vDisk copies. Executing file $WorkingDir\Remove_vDiskCopies-$FileCount.txt"
Write-Output "$date - Executing file $WorkingDir\Remove_vDiskCopies-$FileCount.txt" | Out-File $WorkingDir\log.txt -Encoding ascii -Append
CMD.EXE /C "ssh user@$svc -i PathToKey -m $WorkingDir\Remove_vDiskCopies-$FileCount.txt"
$FileCount++
Execute_AddVdisk-Continue
} else {
foreach ($vDiskCopy in $AllvDiskCopies.vdisk_name) {
$SessionCopies += $vDiskNames | Where-Object {$_ -like $vDiskCopy}
}
if ($SessionCopies -eq $null) {
$date = Get-Date
Write-Host "Deleting vDisk copies. Executing file $WorkingDir\Remove_vDiskCopies-$FileCount.txt"
Write-Output "$date - Executing file $WorkingDir\Remove_vDiskCopies-$FileCount.txt" | Out-File $WorkingDir\log.txt -Encoding Ascii -Append
CMD.EXE /C "ssh user@$svc -i PathToKey -m $WorkingDir\Remove_vDiskCopies-$FileCount.txt"
$FileCount++
Execute_AddVdisk-Continue
} else {
$date = Get-Date
$SessionCopiesCount = $SessionCopies.Count
Write-Host "$SessionCopiesCount copies are still being synched. Sleeping for 60 seconds and checking again..."
Write-Output "$date - $SessionCopiesCount copies are still being synched. Sleeping for 60 seconds and checking again..." | Out-File $WorkingDir\log.txt -Encoding ascii -Append
Start-Sleep -Seconds 60
Delete_vDisks
}
}
}
以下是日志的截断版本:
04/05/2017 10:24:01 - Executing file C:\scripts\SVC_Data_Migrate\05Apr2017-1021\migrate_vdisks-1.txt
04/05/2017 10:24:08 - 9 copies are still being synched. Sleeping for 60 seconds and checking again...
04/05/2017 10:34:16 - 2 copies are still being synched. Sleeping for 60 seconds and checking again...
04/05/2017 10:35:17 - Executing file C:\scripts\SVC_Data_Migrate\05Apr2017-1021\Remove_vDiskCopies-1.txt
04/05/2017 10:35:21 - Executing file C:\scripts\SVC_Data_Migrate\05Apr2017-1021\migrate_vdisks-2.txt
04/05/2017 10:35:27 - 9 copies are still being synched. Sleeping for 60 seconds and checking again...
04/05/2017 11:43:26 - 1 copies are still being synched. Sleeping for 60 seconds and checking again...
04/05/2017 11:44:27 - Executing file C:\scripts\SVC_Data_Migrate\05Apr2017-1021\Remove_vDiskCopies-2.txt
04/05/2017 11:44:31 - Executing file C:\scripts\SVC_Data_Migrate\05Apr2017-1021\migrate_vdisks-3.txt
04/05/2017 11:44:40 - 9 copies are still being synched. Sleeping for 60 seconds and checking again...
04/05/2017 11:58:52 - 9 copies are still being synched. Sleeping for 60 seconds and checking again...
我也尝试过计数,因为它是一个数组,最后我得到了相同的结果
if ($AllvDiskCopies.Count -eq 0)
您提到这是一项计划任务。计划任务本身是否有时间和结束时间?顺便说一句,不需要在代码中分散使用
cmd/c
。您可以只放置要运行的命令行。(毕竟PowerShell是一个shell。它可以运行命令。)@JackChance这主意不错,但它没有结束日期。实际上,我也没有选中“如果任务运行时间超过”复选框。如果在脚本似乎已停止时查看任务,则任务本身只是处于“正在运行”状态。
if ($AllvDiskCopies.Count -eq 0)