2013-07-22 50 views
0

我有有一個GUI用戶界面的PowerShell的應用和我的目標是要登錄我發佈適用於所有用戶的活動,在一箇中心位置。輸出文件升高證書錯誤:設備未準備好

此外,這必須是安全的,所以像「給大家寫訪問日誌文件」不會是一個可接受的解決方案。

我相信我已經成功地完成運行PowerShell中以其他用戶身份,但我的函數休息時候,它會耗盡文件或>>命令。

這是我迄今

function Start-ElevatedCode 
{ 
    param([ScriptBlock]$Code) 
    Start-Process -Credential $logCred -FilePath C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -WorkingDirectory \\Server\d$ -ArgumentList $code 
    Start-Process -FilePath C:\Windows\System32\cmd.exe -Credential $logCred 
    Start-Process $PSHOME\powershell.exe -ArgumentList "-NoExit","-Command `"&{`"`this is output string`' >> `'D:\Pojo Super User\Change.txt`'`"}`"" -Wait 
} 

試過很顯然,我並不需要所有這三個,但只是一個我可以開始工作。第一行是我真正需要的工作,另外兩個只是爲了測試/例子。分別
輸出這三個命令:
Out-file : The device is not ready.

Start-Process : This command cannot be executed due to the error: The directory name is invalid.

The device is not ready.

的$代碼變種,我傳遞的是:
$code = {$logString | Out-File -FilePath 'D:\LogPath\Change.txt'}

PowerShell的V2及以下,CMD命令只請。這必須適用於所有系統。

人有正在生成此通用系統錯誤信息,爲什麼一個想法?
在cmd net helpmsg 21

回答

0

我已經想出了一個解決方案,並張貼顯示我想實現的:
現在我直接遠程進入服務器並執行命令。

Function ActivityLog { 
param ($logEntry) 
    $sesh = New-PSSession -ComputerName theserver -Credential $logCred 
    invoke-command -Session $sesh {param($str) $str | out-file 'D:\myApplication\Activity.log' -Append} -Args $logEntry 
    Remove-PSSession -Session $sesh 
} 
$string = "$date : User $user Restarted application with commandLine : $cmd and PID: $pid" 
ActivityLog $string 

儘管此函數按預期工作,但它不應該花1/2秒將字符串寫入文本文件。 我會把這個問題公開幾天,希望有人有更好的效率解決方案。 (一個不需要遠程連接)

0

如果你想集中日誌記錄,使用Write-EventLog並通過event forwarding收集的事件。

+0

感謝安斯加爾,該解決方案將很遺憾不能爲我工作,我不認爲。雖然我知道這個應用程序只能在網絡中運行,但我並不擁有管理員的權限,它可以運行在所有的計算機上。 – Cole9350

+0

然後我建議你或者聯繫那些擁有集中採伐的想法的人,或者放棄集中採伐的想法。你如何認爲你會處理對你的文件的併發寫入訪問? –

+0

預防:這是真的只是一個簡單的過程管理器應用程序,除了調整監督我們的java.exe進程(並涉及相應的應用處理)。在任何Activity.log條目之前,一個進程被終止。因此,如果2個用戶同時嘗試殺死同一個應用程序,則會引發錯誤。錯誤沒有被記錄的那個。聽起來很容易,儘管我不能說我已經徹底地測試過了。 – Cole9350