【问题标题】:PowerShell change two parts of a string using a for each loopPowerShell 使用 for each 循环更改字符串的两个部分
【发布时间】:2018-07-05 09:20:34
【问题描述】:

我有两个变量:$Computers$Users

我想使用每个包含的对象为每个创建路径

所以:

c:\users\username\appdata becomes \\computername\users\jblogs\appdata

有多少用户和多少计算机。

输出应如下所示:

\computername01\users\jblogs\appdata

\computername02\users\mclogs\appdata

\computername03\users\bfrogs\appdata

\computername04\users\klogs\appdata

我尝试过使用Foreach 循环,但我只能更改计算机名或字符串中的用户名,不能同时更改两者。

有什么建议吗?

我尝试了一种嵌套方法,但这会为尽可能多的用户重复每个计算机名称:

ForEach ($Computer in $computers)
{
    ForEach ($User in $Users)
    {
        $path = "\\$Computer\c$\Users\$User\Appdata"
        Write-Host $path
    }
}

我想我只需要逻辑方面的帮助。

【问题讨论】:

  • 什么是$c
  • @derloopkat,我想你是在问c$,那就是使用 UNC 路径表示法表示远程计算机上的 C: 驱动器。

标签: powershell foreach


【解决方案1】:

双引号不见了,是不是这个原因?

ForEach ($computer in $computers)
{
    Foreach ($User in $Users)
    {
        $path = "\\$Computer\c$\Users\$user\Appdata"
        Write-Host $path
    }
}

【讨论】:

  • 嗨,Hyundong,这只是一个错字。我在该脚本中的路径有双引号。
【解决方案2】:

据我了解,您的计算机数量与用户数量相同。

你看起来是这样的吗:

$computers = "Comp1","Comp2"
$users = "User1","User2"

for ($i=0 ; $i-lt$computers.Length ; $i++)
{
  $path = "\\$($Computers[$i])\c$\Users\$($users[$i])\Appdata"
  Write-Host $path  
}

【讨论】:

  • 您好 JPBlanc,是的,总有与计算机相同数量的用户。我按原样尝试了您的脚本作为测试,不幸的是返回:\\Comp1\c$\Users\\Appdata 无法索引到空数组。在 line:6 char:43 + $path = "\\$($Computers[$i])\c$\Users\$($user[$i])\Appdata" + ~~~~~~~~~ ~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : NullArray 。我认为它可能适用于我将尝试的一些操作。感谢您迄今为止的帮助。
  • 嗨 JPBlanc - 现在可以使用了!我刚刚在第 6 行将 $user 变量更改为 $users。非常感谢!
  • 打错字了,现在可以了。您可以将问题设为已回答。
猜你喜欢
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2020-01-22
  • 2019-05-04
  • 2014-03-15
  • 2011-01-27
相关资源
最近更新 更多