基本上我想映射网络驱动器,从那里提取一些信息并转移到下一个。 我使用批处理脚本执行此操作但在提取信息时我受到限制。 以下是我对批处理脚本的处理方法,它的工作原理很好,它是在我想要上面的行时提取日志中的行:
for /F "tokens=1" %%i in (computers_list.txt) do call :DL %%i
goto end
:DL
echo Triggering %1 >> output.log
net use Z: /delete /yes
net use Z: \\computername\C$ /user:username password
findstr /n "retrieved" "Z:\logs\*.log" >> output.log
echo. >> output.log
:end
答案 0 :(得分:0)
使用正则表达式可能有更好的方法,但这是你要弄清楚:)
我认为这对你有用。
Clear-Host
<#
Contents of C:\Test.txt
Server01
Server02
Server03
#>
$userName = 'domain\user'
$password = ConvertTo-SecureString 'p@ssw0rd' -AsPlainText -Force
$credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $userName, $password
$servers = Get-Content 'C:\Test.txt'
$outputFile = 'C:\output.log'
If (Test-Path $outputFile)
{
Remove-Item $outputFile -Force
}
Foreach ($server in $servers)
{
$null = New-PSDrive -Name 'Z' -PSProvider 'FileSystem' -Root "\\$server\c$" -Credential $credentials
$files = Get-Item -Path 'Z:\logs*.log'
Foreach ($file in $files)
{
$fileContents = Get-Content $file
$previousLine = 'No previous line'
Foreach ($line in $fileContents)
{
If ($line -like '*retrieved*')
{
Add-Content -Value $previousLine -Path $outputFile
Add-Content -Value $line -Path $outputFile
Add-Content -Value ' ' -Path $outputFile
}
$previousLine = $line
}
}
Remove-PSDrive -Name 'Z'
}
If (Test-Path $outputFile)
{
Invoke-Item $outputFile
}