【问题标题】:Deleting contents of file after success成功后删除文件内容
【发布时间】:2019-09-01 07:29:00
【问题描述】:

我想为每个 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
}

如何在run_script $OU 返回特定OUsuccess 之后从第一个文本文件中删除OU。另外,如何将$OU添加到另一个文件ouNamesAdded.txt

如何从C:\ouNames.txt 中提取多个OU,然后为多个OU 并行运行run_script $OU

【问题讨论】:

  • 非常不清楚run_script 对参数$OU 的作用。特别是,因为这似乎只包含名称,而不是 DistinghuishedName.. 请多解释一下并向我们展示相关代码。

标签: windows powershell powershell-2.0 powershell-3.0


【解决方案1】:

这是我做的:

    $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 不匹配的所有文本,并将其写入文本文件,有效地擦除成功运行的字符串。然后它将成功的字符串写入新的“ouNamesAdded”文本文件。

【讨论】:

  • 如何从C:\ouNames.txt 中提取多个OU,然后为多个OU 并行运行run_script $OU
  • @meallhour 这比看起来更复杂,我没有这方面的经验。您最好将其保留为循环。
【解决方案2】:

要将新的 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

如果你想跟踪一个列表并进行实时删除,我会使用类似数组列表的东西:

# 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"

【讨论】:

  • 如何从 C:\ouNames.txt 获取多个 OU,然后为多个 OU 并行运行 run_script $OU
  • 我会查看PowerShell Jobs 进行并行执行。
猜你喜欢
  • 1970-01-01
  • 2021-07-07
  • 2013-10-01
  • 2020-04-02
  • 1970-01-01
  • 2013-08-31
  • 2012-06-20
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多