我有一个小脚本来过滤掉过去7天内远程PC的应用程序和系统的错误日志。
Write-Host "Creating Error Log of Remote PC ......."
[System.Threading.Thread]::CurrentThread.CurrentCulture = New-Object "System.Globalization.CultureInfo" "en-US"
$date = get-date
$range = $date.adddays(-7)
$pcname = Read-Host -Prompt "Please Enter PC name"
Get-WinEvent -ComputerName $pcname -FilterHashtable @{LogName="system","application"; Level=1,2; starttime=$range} |
Select-Object @{label="PC"; expression={"$pcname"}},LogName,levelDisplayName,ProviderName,ID,TimeCreated,message |
Sort-Object logname |
Format-Table -AutoSize |
Out-File C:\Eventlog.txt -width 214748
C:\Eventlog.txt
当它运行时,我会得到一个输入PC名称的提示,问题是当脚本完成后,powershell提示符将返回
PS c:\windows\system32\windowspowershell\v1.0>
如果我想检查另一台PC上的日志,我必须关闭当前的PS窗口并再次运行我的脚本。
如何在首次运行完成后再次显示我的[输入PC名称]提示的循环?
答案 0 :(得分:3)
您可以将现有代码括在while
循环中:
while($true){
Write-Host "Creating Error Log of Remote PC ......."
...
# rest of the code
...
C:\Eventlog.txt
}
这将无限重复您的代码,或直到您按ctrl+c
。
答案 1 :(得分:1)
加入do..while
循环:
$pcname = Read-Host "Enter PC Name"
do {
Write-Host "Creating Error Log of Remote PC ......."
[System.Threading.Thread]::CurrentThread.CurrentCulture = New-Object "System.Globalization.CultureInfo" "en-US"
$date = get-date
$range = $date.adddays(-7)
$pcname = Read-Host -Prompt "Please Enter PC name"
Get-WinEvent -ComputerName $pcname -FilterHashtable @{LogName="system","application"; Level=1,2; starttime=$range} |
Select-Object @{label="PC"; expression={"$pcname"}},LogName,levelDisplayName,ProviderName,ID,TimeCreated,message |
Sort-Object logname |
Format-Table -AutoSize |
Out-File C:\Eventlog.txt -width 214748
C:\Eventlog.txt
$pcname = Read-Host "Enter PC Name"
} while($pcname -match '.+')
while
条件检查输入的内容,因此输入空白字符串(只需在输入处按Enter键)将退出脚本
答案 2 :(得分:0)
一种替代方式
# do your stuff
read-host 'press a key to continue'
$file=$myInvocation |select -expand invocationName
start-process -noNewWindow "powershell.exe" "-file $file"
请注意,我不建议使用它,因为它会在每次迭代时消耗资源。
IMO更好的方法是创建一个simple menu来询问用户是否要再次运行该功能。