受信したファイルを処理するファイルサーバーがあります。ファイルが何らかの理由で処理に失敗すると、そのファイルは障害フォルダに移動されます。私はこれらのフォルダのすべての可能なものを反復し、ファイルのFullNameを私に送る電子メールに吐き出すためのスクリプトを書いた。powershellはファイルのフルネームを自動タスクとしてのみ切り捨てます
これを手動で実行すると、正常に動作します。しかし、スケジュールされたタスク(ローカルシステムとして実行中)としてスクリプトを実行すると、スクリプトは正常に実行されますが、電子メールには次のようなパスが含まれています\\blahblah\blah\blahblahblah\bl.....
スクリプトを数多く、出力は同じになります。手動で実行すると、意図したとおりに動作します。自動スクリプトとして実行すると、FullNamesが切り捨てられます。私はこの問題を持つ他の人たちを見つけましたが、自動化されたタスクではありませんでした。
これはスクリプトの関連コードです。
$emailFileList = ""
$filelist = @()
try {
GCI $topLevelPath -Recurse |
? { $_.PSIsContainer } |
ForEach-Object {
dir $_.FullName |
Where-Object {$_.FullName -like $unableToProcess} | ForEach-Object {
$filelist += dir $_.FullName
}
}
$emailFileList = Out-String -InputObject $($filelist | Select-Object FullName | Format-Table -AutoSize)
$emailBody = $emailBody + $emailFileList
}
EDIT:
私は、以下のHTMLメソッドを使用しますが、ジャンクマークアップの束を追加しました。マークアップを引用符で置き換えるために4行追加しました。 tryブロックの内部はこのようになり、スケジュールされたタスクとしても機能します。 Regardling答え、「重複」上記の問題は、特にPowerShellとWindowsスケジュールタスク間の相互作用である:
GCI $topLevelPath -Recurse |
? { $_.PSIsContainer } |
ForEach-Object {
dir $_.FullName |
Where-Object {$_.FullName -like $unableToProcess} | ForEach-Object {
$filelist += dir $_.FullName
}
}
$emailFileList = $filelist | Select-Object FullName | ConvertTo-Html -fragment
$emailFileList = [regex]::Replace($emailFileList, "<table>.+</th></tr>", "")
$emailFileList = $emailFileList -replace '<tr><td>', '"'
$emailFileList = $emailFileList -replace '</td></tr>', """`r`n"
$emailFileList = $emailFileList -replace '</table>', ''
$emailBody = $emailBody + $emailFileList
私は私がnoooooooo
をやっているのhtmlにも技術的に使用正規表現の編集と思います。
'DIR'と' GCI'は 'Get-ChildItem'と'? '/' Where-Object'と同じエイリアスです。 – TheIncorrigible1
あなたの問題については、 'Select-Object -ExpandProperty 'FullName''を使ってフォーマッタを取り除いてください – TheIncorrigible1
また、これらはお互いのエイリアスですが、私はこのスクリプトを40回書き直したので疲れています。 – user3657661