Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell IP地址_Powershell - Fatal编程技术网

Powershell IP地址

Powershell IP地址,powershell,Powershell,请求修改以下PS脚本的一些想法。目前,我必须手动将第37行中IP地址的前3个八位字节更改为该脚本部署到的位置的IP。正在检查是否有人知道我可以修改脚本的方法,这样我就不必手动更改前三个八位字节,最后一个八位字节将始终为1-60。主机系统上的PS版本为2.0 Function Check-Patches{ Param($Filename) $logname = "C:\temp\PatchVerify\$FileName.csv" [xml]$x = Get-Content "C

请求修改以下PS脚本的一些想法。目前,我必须手动将第37行中IP地址的前3个八位字节更改为该脚本部署到的位置的IP。正在检查是否有人知道我可以修改脚本的方法,这样我就不必手动更改前三个八位字节,最后一个八位字节将始终为1-60。主机系统上的PS版本为2.0

Function Check-Patches{
Param($Filename)

    $logname = "C:\temp\PatchVerify\$FileName.csv"
    [xml]$x = Get-Content "C:\Users\Cambridge\SecurityScans\$FileName.mbsa"

    $PatchStatus = @()

    #This list is created based on a text file that is provided.
    $monthlyPatches = Get-Content "C:\Temp\PatchVerify\Patches_NA.txt" | ? {$_ -match "-KB(?<KB>\d+)"} | % { $matches.KB}


    #Create objects for all the patches in the updatelog that were in the monthly list.
    Switch ( $x | % {$_.SecScan} | % {$_.Check} | ? {$_.id -eq 500} | % {$_.detail} | % {$_.updatedata} | ? {$monthlyPatches -contains $_.KBID} )
    {
        {$_.isinstalled -eq "true"}
                {
                    $PatchStatus += New-Object PsObject -property @{Device=$FileName; Patch=$_.KBID; Present="YES"}
                    Continue
                }
        {$_.isinstalled -eq "false"}
                {
                    $PatchStatus += New-Object PsObject -property @{Device=$FileName; Patch=$_.KBID; Present="NO"}
                    Continue
                }
    }

    $detectedPatches = $PatchStatus | % {$_.Patch}
    #Populate all of the monthly patches that weren't found on the machine as installed or failed
    $monthlypatches | ? {$detectedPatches -notcontains $_} | % { $PatchStatus += New-Object PsObject -property @{Device=$FileName; Patch=$_; Present="Unknown"} }

    #Output results
    $PatchStatus

    }

1..60 | % { Check-Patches "172.26.210.$_" } | Export-Csv "C:\temp\PatchVerify\$env:ComputerName.csv" -NoTypeInformation
功能检查补丁{
参数($Filename)
$logname=“C:\temp\PatchVerify\$FileName.csv”
[xml]$x=获取内容“C:\Users\Cambridge\SecurityScans\$FileName.mbsa”
$PatchStatus=@()
#此列表是基于提供的文本文件创建的。
$monthlyPatches=Get Content“C:\Temp\PatchVerify\Patches_NA.txt”|?{$_-match“-KB(?\d+)}}}}{$matches.KB}
#为每月列表中的updatelog中的所有修补程序创建对象。
开关($x |%{$$.SecScan}}|%{$$.Check}|?{$$\.id-eq 500}|%{$\.detail}|%{$$\.updatedata}|?{$monthlyPatches-包含$\.KBID})
{
{$\.isinstalled-eq“true”}
{
$PatchStatus+=新对象PsObject-property@{Device=$FileName;Patch=$\u0.KBID;Present=“YES”}
继续
}
{$\.isinstalled-eq“false”}
{
$PatchStatus+=新对象PsObject-property@{Device=$FileName;Patch=$\u.KBID;Present=“NO”}
继续
}
}
$detectedPatches=$PatchStatus |%{$|.Patch}
#填充计算机上未找到的所有已安装或已失败的每月修补程序
$monthlypatches |?{$detectedPatches-notcontains$}|%{$PatchStatus+=New Object PsObject-property@{Device=$FileName;Patch=$\uu;Present=“Unknown”}
#输出结果
$PatchStatus
}
1..60 |%{Check Patches“172.26.210.$|”}| Export Csv“C:\temp\PatchVerify\$env:ComputerName.Csv”-notype信息

假设您有一个包含以下内容的文本文件

10.10.13
10.10.14
10.10.15
这些是一些内部子网。把你的最后一句话放在一个循环中,你会得到这样的结果

Get-Content c:\pathtotext\subnets.txt | ForEach-Object{
    $subnet = $_
    1..60 | % { Check-Patches "$subnet.$_" } | Export-Csv "C:\temp\PatchVerify\$env:ComputerName.csv" -NoTypeInformation
}

读取文件的内容,并对文件中的每一行运行语句。由于调用了另一个管道
1..60 |
,这将更改
$\ucode>中的数据,因此需要分配
$subnet=$\ucode>,您可以执行WMI调用以获取本地IP,并执行RegEx替换以获取前三个八位字节。这取代了最后一个八位字节,只得到前三个八位字节

$localip = @(Get-WMIObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled='TRUE'")[0].ipaddress[0] -replace "\.\d+$"
1..60 | % { Check-Patches "$localip.$_" } | Export-Csv "C:\temp\PatchVerify\$env:ComputerName.csv" -NoTypeInformation

不,我怀疑您必须手动修改它。话虽如此。你要把它改成什么?你有名单吗?您可以导入一个文本文件并循环定义的每个子网?IP在站点之间的更改脚本中列出的是我在测试环境中使用的内容。你有一个文本文件的例子,它可以循环通过每个子网?真的,我已经回答了你的问题。你应该接受答案并发布一个新问题。但是对于你的新问题,关于在CSV中获取其他补丁,你应该展示一个补丁的内容示例,这样我们就知道你在使用什么了。好的,这可能有用。你刚刚给了我这个想法,让我试试,然后再给你回复。谢谢。看来我又读不好了。这是正确的答案。我想脚本将在一个位置的不同子网上运行。您好,谢谢您的输入。这个解决方案工作得很好,但是这些设备的.csv文件应该显示“未知”,并且它们都显示“是”。这与我对您的问题的回答无关,这与您如何检查修补程序有关。谢谢,了解了为什么我会得到这些结果,我在第7行中注释了这些结果,从而更正了问题。关于如何让脚本读取第7行并在.csv文件中填充结果,有什么建议吗?我很困惑,在您显示的代码中,第7行是“$patchstatus=@()”。你可以在问题中发布更新的代码吗?