À l'aide de PowerShell complémentaires de Membre entraîne une erreur
Pourquoi le script ci-dessous viennent avec l'erreur suivante?
"Add-Membre : Impossible de commande de processus en raison de manque un ou plusieurs
paramètres obligatoires: InputObject.
+ $obj = Ajouter un Membre <<<< -MemberType NoteProperty -Nom ComputerName-Valeur de $ComputerName
+ CategoryInfo : InvalidArgument: (:) [Add-Member], ParameterBindingException
+ FullyQualifiedErrorId : MissingMandatoryParameter,Microsoft.PowerShell.Commandes.AddMemberCommand"
Script
# Receives the computer name and stores the required results in $obj.
Function WorkerNetworkAdaptMacAddress {
Param($ComputerName)
$colItems = GWMI -cl "Win32_NetworkAdapterConfiguration" -name "root\CimV2" -comp $ComputerName -filter "IpEnabled = TRUE"
$obj = New-Object -TypeName PSobject
ForEach ($objItem in $colItems)
{
$obj = Add-Member -MemberType NoteProperty -Name ComputerName -Value $ComputerName
$obj = Add-Member -MemberType NoteProperty -Name MacAddress -Value $objItem.MacAddress
$obj = Add-Member -MemberType NoteProperty -Name IPAdress -Value $objitem.IpAddress
}
Write-Output $obj
}
# Receives the computer name and passes it to WorkerNetworkAdaptMacAddress.
Function Get-NetworkAdaptMacAddress {
begin {}
process{
WorkerNetworkAdaptMacAddress -computername $_
}
end {}
}
# Passes a computer name to get-networkAdaptMacAddress
'tbh00363' | Get-NetworkAdaptMacAddress
Vous devez vous connecter pour publier un commentaire.
Essayer comme ceci:
Vous avez besoin de déplacer le PSObject la création dans la boucle. Sinon, vous obtiendrez des erreurs que les propriétés existent déjà sur l'objet.
Deuxièmement, vous devez dire à
Ajouter des Membres
sur l'objet à exploiter. Vous le faites, soit par la tuyauterie de l'objet à l'applet de commande ou en le précisant sur leInputObject
paramètre. Enfin, le retour de l'objet en le pipeline en spécifiant lePassThru
interrupteur sur la dernièreAdd-Member
appel:Alternativement, vous pouvez simplifier le processus avec
Nouveau-Objet
-Property
paramètre:Ou en utilisant
Select-Object
:Vous devez d'abord spécifier l'entrée de l'objet pour lequel la propriété doit être ajouté par tuyauterie à la Ajoutez-Membre de l'applet de commande.
Puis, si vous voulez de l'applet de commande pour retourner l'objet modifié, vous devez l'appeler avec la
-PassThru
argument:Voici une version légèrement modifiée du script:
Toutefois, puisque dans votre cas, vous n'avez pas vraiment besoin d'enregistrer la sortie de l'objet dans une nouvelle variable, vous pouvez aussi tout simplement dire:
Comme indiqué par Enrico, Shay et Christian, vous devez spécifier l'objet sur lequel
Add-Member
opère, soit par la tuyauterie de l'objet àAdd-Member
ou en spécifiant explicitement l'objet sur leInputObject
paramètre. Lors de l'ajout de plusieurs membres à l'aide deAdd-Member
je l'habitude d'ajouter lePassThru
interrupteur pour éviter de répéter les InputObject et pour fournir un signal visuel.Vous êtes en assignant le résultat de
Ajouter des Membres
à une variable, pas de l'ajouter à une collection de propriété au sein de$obj
.Au lieu de
Essayez ceci: