我有一個腳本,其中包括一個記錄功能。 該函數將日誌寫入$ msg變量,然後將消息寫入屏幕。 我可以將此輸出重定向到.txt文件進行日誌記錄。從調用命令Powershell日誌記錄
我需要使用invoke-command 將腳本運行到多個服務器,並將日誌輸出寫入運行腳本的計算機上的txt文件。
我想弄清楚如何在PSSession的寫入日誌函數中輸出$ msg並返回它,以便我可以爲所有服務器創建一個主日誌文件。我應該創建並填充自定義對象嗎?不知道如何做到這一點,並從遠程會話中得到結果。
這可以完成嗎?
這裏是我使用的代碼,以及日誌文件的輸出應該看起來像的一個例子:
$servers = 'Server1','Server2'
$logfile = 'c:\scripts\logs\Reg-DLL-log.txt'
foreach($server in $servers){
invoke-command -cn $server -sb{
Param($server)
Function write-log{
[cmdletbinding()]
Param(
[Parameter(ValueFromPipeline=$true,Mandatory=$true)] [ValidateNotNullOrEmpty()]
[string] $Message,
[Parameter()] [ValidateSet(「Error」, 「Warn」, 「Info」)]
[string] $Level = 「Info」,
[Parameter()] [ValidateRange(1,30)]
[Int16] $Indent = 0
)
$msg = "{0} {1}{2}:{3}" -f (Get-Date -Format "yyyy-MM-dd HH:mm:ss"), $Level.ToUpper(), (" " * $Indent), $Message
#This is output to screen
switch ($Level) {
'Error' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor 'Red'}
'Warn' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor 'Yellow'}
'Info' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor 'white'}
}}
write-log -message 'Begin DLL registration for $server' -level Info
$RegFile = "cimwin32.dll"
regsvr32 $RegFile /s
write-log -message 'registered $RegFile' -level Info
write-log -message 'End DLL registration for $server' -level Info
} -ArgumentList $server
}
日誌輸出到REG-DLL-log.txt的應該是這樣的:
2013-06-19 11:25:12 INFO:Begin DLL registration for Server1
2013-06-19 11:25:12 INFO:registered cimwin32.dll
2013-06-19 11:25:12 INFO:End DLL registration for Server1
2013-06-19 11:25:12 INFO:Begin DLL registration for Server2
2013-06-19 11:25:12 INFO:registered cimwin32.dll
2013-06-19 11:25:12 INFO:End DLL registration for Server2
你的答案是概念上等同於安斯加爾爲什麼添加它,接受你自己的答案作爲解決方案? I.m.o.這否認了Ansgar的回答值得信賴...... –