2014-01-20 5 views
0

powershell newb здесь. У меня возникли трудности с попыткой записать мой вывод в файл. Я пробовал две тактики, обе из которых не работают для меня. Первый использует командлет Start/Stop-Transcript. Это отлично работает при тестировании на моей локальной машине, но, похоже, не работает вообще в сценарии, который я развертываю на рабочих станциях.Как зарегистрировать вывод в файл

$path1 = Test-Path ($env:ProgramFiles + "\Sophos\Sophos Anti-Virus\SavService.exe") 
$path2 = Test-Path (${env:ProgramFiles(x86)} + "\Sophos\Sophos Anti-Virus\SavService.exe") 
$shareloc = '\\SERVER1\NETLOGON\SophosPackages\SophosInstall_wFW_Silent.exe' 
$logpath = '\\SERVER1\NETLOGON\si_sophos_log.txt' 


if (($path1 -eq $true) -or ($path2 -eq $true)) {} ELSE { 
& $shareloc 
Start-Transcript -Append -Path $logpath | Out-Null 
Write-Output "" 
Get-Date 
Write-Output "Sophos has been installed on `"$env:COMPUTERNAME`"" 
Write-Output "" 
Stop-Transcript 
} 

Так я предпочел бы сделать это, является использование: | Out-File -Append -FilePath $logpath Я думаю, что это было бы предпочтительным методом, поскольку он будет поймать какую-либо ошибку, которая может возникнуть в журнале, как и проставление на Start-Transcript. Когда я пытаюсь использовать этот метод, однако, я получаю сообщение об ошибке на трубопроводе "An empty pipeline element is not allowed."

$path1 = Test-Path ($env:ProgramFiles + "\Sophos\Sophos Anti-Virus\SavService.exe") 
$path2 = Test-Path (${env:ProgramFiles(x86)} + "\Sophos\Sophos Anti-Virus\SavService.exe") 
$shareloc = '\\SERVER1\NETLOGON\SophosPackages\SophosInstall_wFW_Silent.exe' 
$logpath = '\\SERVER1\NETLOGON\si_sophos_log.txt' 


if (($path1 -eq $true) -or ($path2 -eq $true)) {} ELSE { 
& $shareloc 
Write-Output "" 
Get-Date 
Write-Output "Sophos has been installed on `"$env:COMPUTERNAME`"" 
Write-Output "" 
} | Out-File -Append -FilePath $logpath 

Спасибо заранее за любую помощь!

ответ

1

Если вы пишете следующее:

if ($true) {Write-Output "titi"} else {Write-Output "toto"} | Out-File -Append c:\temp\titi 

вы получите ту же самую ошибку, потому что условие if не вычисляется, когда вы трубку.

Вы можете попытаться заставить ти оценить его

$(if ($true) {Write-Output "titi"} else {Write-Output "toto"}) | Out-File -Append c:\temp\titi 
+0

Это сделало трюк, спасибо! – user3216526

0

Когда условие if оценивается как истинный, пустой сценарий блокируется в Out-File, что вызывает вашу ошибку. то есть следующие кидает ошибку вы указали:

if($true) { } else { Write-Output "Something" } | Out-File -Append -FilePath C:\temp\myfile.txt

+0

Он давая мне ошибку, когда я что-то добавить к $ истинной ScriptBlock. Неужели я вас не понимаю? – user3216526

+0

Ah ok see @JPBlanc - if ($ false) фактически производит такое же поведение. Я стою исправлено! – AHowgego

 Смежные вопросы

  • Нет связанных вопросов^_^