将Get-content输出为变量?

时间:2018-07-04 14:07:54

标签: powershell loops foreach

我正在尝试在get-content和convertfrom-json cmd上运行foreach循环。现在我意识到这可能会导致变量存在多个值的问题,我想知道如何继续将此信息传递给脚本的其余部分。

update_progress()

现在,当我在没有$ conv =的情况下运行它时,它将返回

$testconv = Get-device * |select ID
$testid = $testconv.id

$conv = foreach ($id in $testid) 
{
get-content "\\HDC-PRTG-03\System Information Database\Services\Device$id.Services" | Convertfrom-json 
} 

$rpccheck =$conv.message
$snmpcheck = $conv.message
$svcname = $conv.data.displayname
$svcstate=$conv.data.properties.state

if($RPCon = $rpccheck |select-string -pattern RPC -AllMatches){
write-host RPC Not enabled
}else{
write-host No RPC Enabled - Moving to Services List 

我期望的是什么。但是,当我用$ conv =定义一个变量时,它只是开始说它找不到我发现抛出异常错误的文件路径,但是嘿。

你们中的任何一个聪明人都对我如何将这些fromjson对象保留在内存中有任何指示,以便我可以继续对它们运行foreach循环。该脚本的最终功能是查询本地.services文件以了解设备上正在运行哪些服务,然后创建传感器以在我们的PRTG安装中对其进行监视。因此,我需要能够引用deviceID并将其应用于它。

我怀疑我可能在整个脚本中使用了太多的foreach循环,但是坦率地说,我超出了我的深度100%

非常感谢任何指导

山姆

1 个答案:

答案 0 :(得分:0)

如果我正确理解,您应该拥有所有设备ID的json文件。如果缺少具有特定设备名称的文件,则会出现“找不到文件”错误。

对于代码,您可以尝试以下操作:

$testconv = Get-Device * | select ID
$testid = $testconv.id

$oldErrorAction = $ErrorActionPreference
$ErrorActionPreference = 'Stop'

foreach ($id in $testid) {
    try {
        $conv = Get-Content -Path "\\HDC-PRTG-03\System Information Database\Services\Device$id.Services" -Raw | ConvertFrom-Json 
        $rpccheck  = $conv.message  # These look the same to me...
        $snmpcheck = $conv.message  # These look the same to me...
        $svcname   = $conv.data.displayname
        $svcstate  = $conv.data.properties.state

        $Matches = ($rpccheck | Select-String -Pattern "RPC*" -AllMatches)
        if ($Matches.Matches.Count) {
            Write-Host "RPC Not enabled"
        }
        else {
            Write-Host "No RPC Enabled - Moving to Services List "
        }
    }
    catch {
        Write-Warning $_.Exception.Message
    }
} 

$ErrorActionPreference = $oldErrorAction

除了尝试使用try {} .. catch {}之外,您还可以在执行Test-Path之前直接使用Get-Content测试是否存在具有该名称的文件。