Я создал две функции в Powershell, первая функция функции получит ключ реестра, если существует return имя_компьютера и boolan, второй получить список установленных обновлений Windows и проверить, существует ли какое-то обновление. ... и вернуть имя_компьютер и boolan allso .. сейчас проблема в том, что Whan я пытаюсь получить доступ к 1-му объекту в трубе я получаю пустой ...Доступ 1-й объект в трубке powershell
Function Get-RegKey {
<#
.SYNOPSIS
"By OhadH 2012"
.DESCRIPTION
Read Key From Registry and create it if not exist
.PARAMETER LiteralPath
.EXAMPLE
Get-RegKey -strMachine "127.0.0.1" -Location "Software\\MyKey" -strValue "Type" -strValueToSearch "Server"
Read The Registry key from "HKLM\Software\MyKey" the value Type and search for the value "Server"
.EXAMPLE
Get-RegKey "127.0.0.1" "Software\\MyKey" "Type" "Server"
Read The Registry key from "HKLM\Software\MyKey" the value Type and search for the value "Server"
By Postion and not by value name
.NOTES
Author: OhadH
Date: Feb 09, 2012
#>
param (
[parameter(Mandatory = $true,Position=0,ValueFromPipeline=$true)][String]$strMachine,
[parameter(Mandatory = $true,Position=1)][String]$Location,
[parameter(Mandatory = $true,Position=2)][String]$strValue,
[parameter(Mandatory = $true,Position=3)][String]$strValueToSearch
)
begin { $obj = New-Object psobject }
process {
try {
$obj | Add-Member NoteProperty 'strMachine' $strMachine -Force
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $strMachine)
$regKey = $reg.OpenSubKey($Location,$true)
$RegRead = $regKey.GetValue($strValue)
if ($RegRead -eq $strValueToSearch) { $obj | Add-Member NoteProperty 'RegExist' $true -Force }
else { $obj | Add-Member NoteProperty 'RegExist' $false -Force }
}
catch [System.Exception] { $obj | Add-Member NoteProperty 'RegExist' "!!Error!!" -Force }
}
end { return $obj }
}
Function Set-RegKey {
<#
.SYNOPSIS
"By OhadH"
.DESCRIPTION
Create Registry Key
.PARAMETER LiteralPath
.EXAMPLE
Set-RegKey -strMachine "127.0.0.1" -Location "Software\\MyKey" -strValue "Type" -strValueToSet "Server"
Read The Registry key from "HKLM\Software\MyKey" the value Type and search for the value "Server"
.EXAMPLE
Get-RegKey "127.0.0.1" "Software\\MyKey" "Type" "Server"
Read The Registry key from "HKLM\Software\MyKey" the value Type and search for the value "Server"
By Postion and not by value name
.NOTES
Author: OhadH
Date: Feb 09, 2012
#>
param (
[parameter(Mandatory = $true,Position=0,ValueFromPipeline=$true)][String]$strMachine,
[parameter(Mandatory = $true,Position=1)][String]$Location,
[parameter(Mandatory = $true,Position=2)][String]$strValue,
[parameter(Mandatory = $true,Position=3)][String]$strValueToSet
)
begin { $obj = New-Object psobject }
process {
try {
$obj | Add-Member NoteProperty 'strMachine' $strMachine -Force
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $strMachine)
$reg.CreateSubKey($Location) | Out-Null
$regKey = $reg.OpenSubKey($Location,$true)
$regKey.SetValue($strValue,$strValueToSet,"String")
}
catch [System.Exception] { }
}
end { }
}
Function Get-WindowsUpdate {
<#
.SYNOPSIS
"By OhadH"
.DESCRIPTION
Get specific Installed KB
.PARAMETER LiteralPath
.EXAMPLE
Get-WindowsUpdate -strMachine 127.0.0.1 -strUpdate "KB2633952"
Get if KB2633952* installed on local machine
.EXAMPLE
Get-WindowsUpdate 127.0.0.1 "KB2633952"
Get if KB2633952* installed on local machine
.NOTES
Author: OhadH
Date: Feb 09, 2012
#>
param (
[parameter(Mandatory = $true,Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)][String]$strMachine,
[parameter(Mandatory = $true,Position=1,ValueFromPipeline=$true)][String]$strUpdate
)
begin { $obj = New-Object psobject }
process {
try {
$obj | Add-Member NoteProperty 'strMachine' $strMachine -Force
if ((gwmi -ComputerName $strMachine Win32_QuickFixEngineering | ? {$_.HotFixID -like $strUpdate+"*"}) -ne $null)
{ $obj | Add-Member NoteProperty 'KBInstalled' $true -Force }
else { $obj | Add-Member NoteProperty 'KBInstalled' $false -Force }
}
catch [System.Exception] { $obj | Add-Member NoteProperty 'KBInstalled' "!!Error!!" -Force }
}
end { return $obj }
}
$subnet = '10.0.0.'
for ($i=1; $i -le 250; $i++) {
$cntIP = $subnet + $i
if ($cntIP = ($cntIP | Ping-Host -icmp | where { $_.Responding }).IPAddress) {
Set-RegKey -strMachine $cntIP "SOFTWARE\\MyKey" -strValue "Type" -strValueToSet "Server"
Get-RegKey -strMachine $cntIP "SOFTWARE\\MyKey" -strValue "Type" -strValueToSearch "Server" | Get-WindowsUpdate -strUpdate "KB2633952" | select strMachine,**@{N="RegExist";E={$_.RegExist}},**KBInstalled
}
}
Спасибо за помощь Ohad
Какая часть всего этого дает вам проблемы? Каково ожидаемое поведение? –
whan я пытаюсь получить доступ к 1-му элементу в трубе ... 'Get-RegKey -strMachine $ cntIP" SOFTWARE \\ MyKey "-strValue" Type "-strValueToSearch" Сервер "| Get-WindowsUpdate -strUpdate "KB2633952" | выберите strMachine, @ {N = "RegExist"; E = {$ _. RegExist}}, KBInstalled' Я хочу получить значение ** RegExist ** из 1-го конвейера. если я получу функции один за другим, я могу получить доступ ко всем свойствам ... но в трубе я не могу получить доступ к значениям в ** RegExist ** – OhadH
PS: ** RegExist ** - это значение, возвращаемое Get-RegKey – OhadH