try
/catch
のpowershellスクリプトを使用して、エラーをログファイルに書き込みます。これはPowershell ISEではうまく動作しますが、Powershellコンソールではうまく動作しません。スクリプトは次のとおりです。Powershellコンソールでは動作しませんが、ISEで動作します
$serverfile = "C:\Serverlist.txt"
$Logfile = "C:\Deploy_Log.txt"
$startdate= "01/05/2016"
$starttime = 13
Set-StrictMode -Version latest
$ErrorActionPreference = "Stop"
$WarningPreference = "Stop"
function LogWrite {
param([string]$logstring)
Add-Content $Logfile -Value $logstring
}
function DeployTask {
param([string]$server1)
$arguments = '/Create', '/S', "$server1", '/RU', 'domain\user', '/RP', 'pa$$w0rd', '/SC', 'ONCE', '/st', "$starttime`:00:00", '/sd', "$startdate", '/TN', 'Task_InstallUpdates', '/TR', 'C:\patchday\InstallUpdates.bat', '/RL', 'HIGHEST', '/F'
Write-Host "$startdate, $starttime`:00"
if (Test-Connection $server1 -Quiet) {
# delete scheduled task
try {
schtasks.exe /S $server1 /delete /tn Task_InstallUpdates /f
} catch {
$ErrorMessage = $_.Exception.Message
LogWrite "$server1 : Error deleting scheduled task - $ErrorMessage"
}
# create scheduled task
try {
& schtasks.exe $arguments
} catch {
$ErrorMessage = $_.Exception.Message
LogWrite "$server1 : Error creating scheduled task - $ErrorMessage"
}
} else {
LogWrite "$server1 is not available"
}
}
$servers = Get-Content -Path $serverfile
foreach ($server1 in $servers) {
Write-Host $server1
try {
DeployTask $server1
} catch {
$ErrorMessage = $_.Exception.Message
LogWrite "$server1 : $ErrorMessage"
}
}
どのようなアイデアですか? $ErrorActionPreference
と$WarningPreference
を「停止」に設定し、厳格モードを有効にしました。 ISEでログファイルが作成され、内容は次のようなものです:
srv17:エラーがスケジュールされたタスクの作成 - WARNING:タスクが実行されないことがありますので、/ STが現在時刻よりも早いです。
srv18:スケジュールされたタスクの作成中にエラーが発生しました - 警告:/ STが現在時刻よりも前になっているため、タスクが実行されないことがあります。
Powershellコンソールでは、ログファイルは作成されず、すべてのエラーと警告がコンソールに表示されます。
してください[編集]あなたの質問や(詳細で)精巧な違いは何ですか? – JosefZ