成功后删除文件内容

时间:2019-04-10 18:40:54

标签: windows powershell powershell-v2.0 powershell-v3.0

我想为每个OU运行相同的Powershell命令。 OU列表在文本文件中给出。

**Powershell command:**
run_script OU1
run_script OU2

**Text File:**
OU1
OU2
...

到目前为止,我已经编写了以下逻辑:

$OUnames = Get-Content("C:\ouNames.txt");
foreach ($OU in $OUnames)
{
    $output = run_script $OU
      if($output -contains "success")
      // then delete $OU from ouNames.txt
      // and inlcude $OU in the file ouNamesAdded.txt
}

OU返回特定run_script $OU的{​​{1}}之后,如何从第一个文本文件中删除success。另外,如何将OU添加到另一个文件$OU

如何从ouNamesAdded.txt中提取多个OU,然后针对多个OU并行运行C:\ouNames.txt

2 个答案:

答案 0 :(得分:0)

要将新的OU内容添加到新文件中,可以使用Add-Content

$OU | Add-Content "ouNamesAdded.txt"

对于删除内容,我将在完成循环后执行此操作。如果对命令满意,可以删除-whatif参数。

Compare-Object -ReferenceObject (Get-Content ouNames.txt) -DifferenceObject (Get-Content ouNamesAdded.txt) -PassThru | Set-Content ouNames.txt -whatif

我不知道会从文件中删除一行的任何内容。如果要在每次迭代后从文件中删除OU,则需要执行以下操作:

# Execute within the if statement
Get-Content ouNames.txt -notmatch "^$OU$" | Set-Content ouNames.txt
# Or using the $OUNames array (more efficient)
$OUnames -notmatch "^$OU$" | Set-Content ouNames.txt

如果您想跟踪列表并进行实时删除,则可以使用arraylist之类的东西:

# Run this before the loop code
$OUs = $OUnames.clone() -as [system.collections.arraylist]
# Run this within the if statement
$OUs.Remove($OU)
# After the loop completes, then write to the output file
$OUs | Set-Content "ouNamesAdded.txt"

答案 1 :(得分:0)

这是我煮的东西:

    $OUnames = Get-Content("C:\ouNames.txt")
foreach ($OU in $OUnames)
{
$output = run_script $OU
  if($output -contains "success")
  {
   $OUs = Get-Content("C:\ouNames.txt")
   $OUs -notmatch "$OU" | Out-File "C:\ouNames.txt"
   $OU | Out-File "C:\ouNamesAdded.txt" -Append
  }
}

此代码将遍历文本文件并在每个文件上运行“ run_script”命令。如果成功,它将获取文件中与成功OU不匹配的所有文本,并将其写入文本文件,有效擦除成功运行的字符串,然后将成功的字符串写入新的“ ouName Leicester”文本文件。