21

以下のコードを使用して、スケジュールされたタスク情報を取得し、画面に表示される出力をログファイルに記録します。

ただし、「アクセスが拒否されました」というサーバーを除いて、すべてのエラーがログに記録されることに気付きました。これらのエラーをログファイルにも記録するにはどうすればよいですか。

以下はコードです:

Start-Transcript -path $scheduledpath\logging.txt -append

foreach ($name in $names) 
{
    Write-Host "Running Against Server $name" -ForegroundColor Magenta
    if ( Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue ) 
        {
            #$Command = "schtasks.exe /query /S $name /fo CSV /v >c:\tools\Scheduled\$name.csv"
            $Command = "schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv"
            Invoke-Expression $Command
            Clear-Variable Command -ErrorAction SilentlyContinue
        }

    else{
            Write-Host "$name is Down" -ForegroundColor Red
        }

}

Stop-Transcript

画面の出力は次のとおりです。

> Running Against Server SV064909 
> SV064909 is Down 
> Running Against Server SV081372 
> SV081372 is Down 
> Running Against Server YBEF008690_vorher_SV064930 
> YBEF008690_vorher_SV064930 is Down 
> Running Against Server Alt_SV064921 
> Alt_SV064921 is Down 
> Running Against Server SV073632 
> ERROR: Access is denied. 
> Running Against Server SV073633 
> ERROR: Access is denied.

これがログファイルの出力です....アクセスが拒否されていません...?

> Running Against Server SV064909 
> SV064909 is Down 
> Running Against Server SV081372 
> SV081372 is Down 
> Running Against Server YBEF008690_vorher_SV064930 
> YBEF008690_vorher_SV064930 is Down 
> Running Against Server Alt_SV064921 
> Alt_SV064921 is Down 
> Running Against Server SV073632 
> Running Against Server SV073633
4

5 に答える 5

15

ネイティブコマンド出力がStart-Transcript出力に記録されていないが、コンソールに出力されているこの動作は、接続バグ315857で報告されています。考えられる解決策については、回避策を参照してください。

于 2012-10-31T15:02:01.763 に答える
12

最も簡単な回避策は、ネイティブコマンドの結果をにパイプすることですOut-Host

schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv | Out-Host
于 2013-04-17T14:42:00.750 に答える
4

上記のどれも私のために働いていませんでした。私は2009年からこの問題の議論へのリンクを見つけました。しかし、2010年のマイクロソフトのブログで問題が解決しました。

つまり、ネイティブコマンドの出力をOut-Defaultにパイプします。

  schtasks.exe /query /S $name /fo CSV /v | Out-Default

{私は実際にその行を自分で試したわけではありませんが、あなたはその考えを理解しています。}

于 2016-03-17T13:33:20.040 に答える
1

ああ、正解は次のようになります。

$Command = "schtasks.exe /query /S $name /fo CSV /v 2>&1 >$scheduledpath\$name.csv"

つまり、stderror(パイプ2)をstdout(パイプ1)にパイプし、両方がstdoutに表示されるようにします。

于 2016-02-24T21:01:11.750 に答える
0

サービスタグを取得

    $servicetag = Get-WmiObject win32_bios | Select-Object -ExpandProperty SerialNumber 
    Write-output $servicetag

スクリプトの上部にある1行でWrite-outputを使用しましたが、その後はすべてWrite-Hostでした。しかし、すべての「書き込み」出力がスクリプトに表示されるようになりました。

于 2017-12-13T19:23:58.157 に答える