如何在PowerShell中使用用户名和密码创建映射网络驱动器的循环?

时间:2017-08-24 20:31:46

标签: powershell batch-file

基本上我想映射网络驱动器,从那里提取一些信息并转移到下一个。 我使用批处理脚本执行此操作但在提取信息时我受到限制。 以下是我对批处理脚本的处理方法,它的工作原理很好,它是在我想要上面的行时提取日志中的行:

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

1 个答案:

答案 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
}