gpt4 book ai didi

powershell - Foreach未处理每一项,而是尝试将全部处理为一行

转载 作者:行者123 更新时间:2023-12-03 00:08:30 28 4
gpt4 key购买 nike

我正在构建一个脚本来提取计算机的mac地址,并将其转换为GUID,然后将其查询到AD以找到匹配项并检索与该guid关联的主机名。

我所读到的有关“Foreach”的所有内容都表明我正在使用“SHOULD”的代码。

$NIC = Get-WMIObject Win32_NetworkAdapterConfiguration | select MacAddress
$NICMacs = $NIC.MacAddress

Foreach ($NICMac in $NICMacs)
{

$MacString = $NICMacs -replace ":", ""
$MactoGUID = "00000000000000000000" + $MacString
$MactoGUID = $MactoGUID -replace " ", ''
$NBG = [GUID]$MactoGUID
$CompDetails = Get-ADComputer -Filter 'netbootGUID -like $NBG' -Properties netBootGUID -Server our.AD.server.ca -Credential $sessionKey

这应该处理找到的每个mac地址,除去:字符并添加20个“0”,然后转换为GUID格式并查询AD的匹配项。
取而代之的是,它使用找到的所有mac地址,将它们连接到一行,然后尝试使用所有这些数字进行处理。当然,AD将其拒绝为不正确的GUID。
如果我仅使用1个mac地址使用相同的代码,则其格式正确。

最佳答案

您的某些步骤可以合并,从而使用保存中间变量

  • Select-Object -ExpandProperty MacAddress
  • .PadLeft()方法

  • 正如 @RobV在其评论中已经指出的,使用错误的var会导致故障。
    Foreach ($NICMac in (Get-WMIObject Win32_NetworkAdapterConfiguration |
    Where-Object MacAddress -ne '' |
    Select-Object -ExpandProperty MacAddress) ) {
    $NBG = [GUID]($NICMac -replace ':').PadLeft(32,'0')
    $CompDetails = Get-ADComputer -Filter 'netbootGUID -like $NBG' `
    -Properties netBootGUID -Server our.AD.server.ca -Credential $sessionKey
    }

    我不认为深奥的续行字符的用法
    在这里,可以保留概述。

    我同意 Natural Line Continuations in PowerShell是可取的。

    关于powershell - Foreach未处理每一项,而是尝试将全部处理为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55305312/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com