【问题标题】:Concatenating PowerShell variables连接 PowerShell 变量
【发布时间】:2013-11-14 22:15:04
【问题描述】:
$timeout = new-timespan -Minutes 1
$sw = [diagnostics.stopwatch]::StartNew()
$path = "d:\powershell\test.csv"

"Processor Load, Available Memory(MB), Max Memory(Bytes)" >> $path

while ($sw.elapsed -lt $timeout)
{
    $a = gwmi -query "Select * from win32_processor"
    $b = gwmi -query "Select * from win32_perfrawdata_perfOS_memory"
    $c = gwmi -query "Select * from win32_physicalmemory"
    $date = Get-Date -format s

    $a.loadpercentage + "," + $b.availableMbytes + "," + $c.capacity >> $path
    start-sleep -seconds 5
}

所以我只是想了解一下正在发生的事情。我不只是出于某种原因在 perfmon 中打开它。基本上我希望在提到的 CSV 文件中得到一个逗号分隔的输出。它适用于单个变量,但是当我尝试添加第二个变量或文本时,我收到以下错误。

Cannot convert value ", test" to type "System.Int32". Error: "Input string was not in a
correct format."
At D:\powershell\VDIPerfMon.ps1:14 char:21
+     $a.loadpercentage + <<<<  ", test" >> $path
+ CategoryInfo          : NotSpecified: (:) [], RuntimeException
+ FullyQualifiedErrorId : RuntimeException

我该如何解决这个问题?

【问题讨论】:

  • 我使用 powershell 连接运算符 -j 给出了一个简单的答案,但我建议使用哈希表创建自定义对象,然后将其发送到 Export-CSV

标签: powershell perfmon


【解决方案1】:

当您使用+ 运算符时,PowerShell 会查看左侧以确定表达式的结果类型。它在+ 的左侧看到一个 int,在右侧看到一个字符串(不能转换为 int)。试试这个方法:

"$($a.loadpercentage), $($b.availableMbytes), $($c.capacity)" >> $path

在你写标题的地方,你可能不想附加,即为了覆盖旧的尝试:

"Processor Load, Available Memory(MB), Max Memory(Bytes)" > $path

【讨论】:

  • 效果非常好。非常感谢,感谢您对“+”的解释。作为 Powershell 的新手,这让我很沮丧,因为脚本的其余部分就像我想要的那样工作。
【解决方案2】:

错误是因为$a.loadpercentage 是一个int。然后您尝试添加一个 int 和一个字符串。

一种解决方法是显式调用 .ToString()

$a.loadpercentage.ToString() + "," + $b.availableMbytes.ToString() + "," + $c.capacity.ToString() >> $path

另一种方法是 PowerShell 数组连接运算符。它快速简单,类型无关紧要:

($a.loadpercentage, $b.availableMbytes, $c.capacity) -join "," |
    Add-Content $path

另一种方法是使用字符串格式化程序。这将很容易让您控制每个值的精度和显示:

'{0},{1},{2}' -f $a.loadpercentage, $b.availableMbytes, $c.capacity

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多