2016-11-29 2 views
0

Eher Amateur Scripter hier, versuchen, Listen von Computernamen an einen Befehl zu übergeben, so dass es durch sie durchlaufen und geben Sie mir nur ihren Namen, OS und OS-Version.Wie übermittele ich in Powershell eine Variable an einen Befehl, der einem Array hinzugefügt werden soll?

$Lab01comps = Get-ADComputer -SearchBase 'OU=Lab01,DC=domain,DC=domain,DC=domain' -Filter '*' | Select -Exp Name | sort 
$Lab02comps = Get-ADComputer -SearchBase 'OU=Lab02,DC=domain,DC=domainstate,DC=edu' -Filter '*' | Select -Exp Name | sort 

#This first one is more focused on just using a computer name in position 1. Example below code. 
function Get-OS { 
    [CmdletBinding(DefaultParameterSetName="Remote")] 
    Param(
    [Parameter(Position=1,ParameterSetName="Local")] 
    [Parameter(Position=2,ParameterSetName="Remote")] 
    [string]$ComputerName, 

    [System.Management.Automation.PSCredential]$Credential, 

    [switch]$Raw 
    ) 
    If (! $ComputerName) { 
    $ComputerName = $env:COMPUTERNAME 
    } 
    foreach ($comp in $ComputerName) { 
    Get-ADComputer $ComputerName -cred $cred -prop OperatingSystem,OperatingSystemVersion | select name,OperatingSystem,OperatingSystemVersion 
    } 
} 
#Example 
PS C:\> Get-OS LAB01COMP1 
Name  OperatingSystem  OperatingSystemVersion 
----  ---------------  ---------------------- 
LAB01COMP1 Windows 7 Enterprise 6.1 (7601) 

#Attempt 2: This one works, but it requires adding to the $osq array before running just the command, with no parameters. Example below code. 
$osq = @() 
function Get-OS2 { 
    foreach ($ComputerName in $osq) { 
    Get-ADComputer $ComputerName -cred $cred -prop OperatingSystem,OperatingSystemVersion | select name,OperatingSystem,OperatingSystemVersion 
    } 
} 
#Example 
PS C:\> $osq += $Lab01comps 
PS C:\> $osq 
LAB01COMP1 
LAB01COMP2 
LAB01COMP3 
PS C:\> Get-OS2 
Name  OperatingSystem  OperatingSystemVersion 
----  ---------------  ---------------------- 
LAB01COMP1 Windows 7 Enterprise 6.1 (7601) 
LAB01COMP2 Windows 7 Enterprise 6.1 (7601) 
LAB01COMP3 Windows 7 Enterprise 6.1 (7601) 

Ich weiß, dass hier wahrscheinlich ein ziemlich großer Code-Block war zu schreiben, aber ich wollte alle zeigen, was ich bisher versucht. Was ich möchte in der Lage sein wird, etwas zu tun wie folgt aus:

PS C:\> Get-OS $Lab01comps 
Name  OperatingSystem  OperatingSystemVersion 
----  ---------------  ---------------------- 
LAB01COMP1 Windows 7 Enterprise 6.1 (7601) 
LAB01COMP2 Windows 7 Enterprise 6.1 (7601) 
LAB01COMP3 Windows 7 Enterprise 6.1 (7601) 

Ich mag das Gefühl, es ist etwas einfach fehlt mir, aber meine Versuche und Online-Hilfe Suche haben irgendwie fruchtlos gewesen. Es ist eine einfache Sache, die Variablen einem Array zuzuführen, bevor Sie den Befehl ausführen, aber für den Code selbst und das Streben nach Wissen für mich würde ich gerne wissen, ob das, was ich versuche, möglich ist.
Danke!

+0

'[string] $ ComputerName' ->' [string []] $ ComputerName' – PetSerAl

Antwort

1

Wie PetSerAl sagte, das Hinzufügen der leeren Klammern zu der Zeichenfolge wird funktionieren.

[string]$ComputerName becomes [string[]]$ComputerName 

Dadurch können die Daten als ein Array behandelt werden, nicht nur eine Zeichenkette. Sehen Sie sich das unten als ein Beispiel an.

Dies gibt nur den Buchstaben t aus, weil er die erste Position, also den Buchstaben t, einnimmt.

Wir arbeiten jedoch mit einem Array, nicht nur eine Folge von Buchstaben. Wenn wir also die leeren Klammern

[string[]]$data = 'this','is','my','array' 
$data[0] 

hinzufügen gibt diese nun das Wort ‚this‘, weil es als ein Array behandelt wird, und das erste Element in diesem Array ist „this“.

Es ist auch erwähnenswert, dass Ihre zweite Skript gearbeitet, weil Sie es als ein Array deklariert = @()

Ohne das verwendet wird, ist es nur eine String-Variable.

Hoffe, das hilft! Ich bin auch neu in Powershell, aber Junge ist es nicht lustig, es zu lernen?

+0

Oh mein Gott, ich bin ein Dummkopf. Zunächst einmal, danke, das hat funktioniert! Zweitens, fand ich, dass ich diese hatte: 'foreach ($ comp in $ Computer) { Get-ADComputer $ ComputerName' ich setzen' Get-ADComputer $ ComputerName' statt 'Get-ADComputer $ comp' Vielen Dank! – Casspers

Verwandte Themen