powershell - 变量是数组而不是字符串?
问题描述
我写了这个小脚本,当我测试时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
cmdlet 在输入字符串和文件中
Select-String
搜索文本和文本模式。其中的基本类型输出Get-WMIObject Win32_Bios
是System.Management.ManagementBaseObject
(Get-WMIObject Win32_Bios).Gettype() IsPublic IsSerial 名称 BaseType -------- -------- ---- -------- True 真正的 ManagementObject System.Management.ManagementBaseObject
在这种情况下
Select-String
,您可以使用Select-Object
在属性中进行选择,而不是 。因为,Serial Number
是您的输入命令返回的属性之一。$serial = "C000$serial"
的输出
$serial
将是这样的:序列号
5CXXXXYYYXZZZ同样,您可以通过 直接调用它
$serial.SerialNumber
。所以你的整体代码将是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 } }
或者您可以使用cmdlet
-ExpandProperty
的参数,例如Select-Object
$serial = Get-WMIObject Win32_Bios -ComputerName $_.name | Select-Object -ExpandProperty SerialNumber $serial = "C000$serial"
推荐阅读
- sql - 使用 SYS_REFCURSOR 作为 OUT 参数的 Oracle 过程仅显示旧值
- python - 在 DRF 框架中暴露条目 ID 的风险
- matlab - MATLAB 用户定义的类内存使用情况
- node.js - 在 NodeJS 项目中放置 Google Maps API 密钥的位置
- go - Golang r.URL.Query("x") 不返回带有特殊字符的完整值
- javascript - 我在 VScode 中遇到了 Sonarlint 扩展的问题,因为它无法识别 JS 代码
- javascript - 在某些设备(主要是 iPhone)中提交后表单不发送数据
- hdfs - 将 impala 表存储为文本文件时,是否可以告诉它在文本文件中保存列名?
- mysql - sqlMessage: '客户端不支持服务器请求的认证协议;考虑升级 MySQL 客户端',
- visual-studio-code - 用于显示活动页面的包含文件的 VSCode 插件