gpt4 book ai didi

powershell - 变量是数组而不是字符串?

转载 作者:行者123 更新时间:2023-12-03 00:34:02 25 4
gpt4 key购买 nike

我写了这个小脚本,当我测试Write-Host $serial时看起来不错,但是当它在后台运行时$serial似乎包含一个数组。

它尝试将计算机重命名为C000@{SerialNumber=F7ZL3F2}而不是C000F7ZL3F2

我应该怎么做才能得到字符串而不是这个数组?

Import-Module ActiveDirectory
Get-ADComputer -Filter {Name -like 'DESKTOP-*'} -Properties * | Select Name, DNSHostName | ForEach-Object {
$rtn = Test-Connection -CN $_.dnshostname -Count 1 -BufferSize 16 -Quiet
if ($rtn -match 'True') {
$serial = Get-WMIObject Win32_Bios -ComputerName $_.name | Select-String SerialNumber
$serial = "C000$serial"
// Write-Host $serial
Rename-Computer -ComputerName $_.name -NewName $serial -DomainCredential $mycreds -Force -Restart
}
}

最佳答案

您的代码中要指出两个错误-

  • $serial = Get-WMIObject Win32_Bios -ComputerName $_.name | Select-String SerialNumber
    Select-String cmdlet在输入字符串和文件中搜索文本和文本模式。其中Get-WMIObject Win32_Bios的基本类型输出是System.Management.ManagementBaseObject
    (Get-WMIObject Win32_Bios).Gettype()IsPublic IsSerial Name             BaseType-------- -------- ----             --------True     True     ManagementObject System.Management.ManagementBaseObject

    In such cases, instead of Select-String, you can use Select-Object to choose amongst the properties. Since, Serial Number is one of the properties returned by your input command.

  • $serial = "C000$serial"

    The output of $serial will be something like this:

    SerialNumber
       
    5CXXXXYYYXZZZ

    Again, you can call it directly by $serial.SerialNumber. So your overall code will be

    Import-Module ActiveDirectory

    Get-ADComputer -Filter {Name -like 'DESKTOP-*'} -Properties * | Select Name, DNSHostName | ForEach-Object {
    $rtn = Test-Connection -CN $_.dnshostname -Count 1 -BufferSize 16 -Quiet

    if ($rtn -match 'True') {
    $serial = Get-WMIObject Win32_Bios -ComputerName $_.name |
    Select-Object SerialNumber

    $serial = "C000$($serial.SerialNumber)"

    Rename-Computer -ComputerName $_.name -NewName $serial -DomainCredential $mycreds -Force -Restart
    }
    }

    或者您可以使用-ExpandProperty cmdlet的Select-Object参数,例如
    $serial = Get-WMIObject Win32_Bios -ComputerName $_.name |
    Select-Object -ExpandProperty SerialNumber
    $serial = "C000$serial"
  • 关于powershell - 变量是数组而不是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50443880/

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