honeybee

Powershell: Computernamen eingeben

Hallo,

ich versuche gerade, ein Powershell-Skript zu schreiben, welches dem Benutzer auffordern soll, einen Computernamen einzugeben. Wenn der Computername nicht eingegeben wird bzw. wenn dieser Vorgang abgebrochen wird, soll die Meldung wieder auftreten und zwar so lange, bis ein Computername eingegeben wurde.

Ich bin leider kein Powershell-Profi. Wie gehe ich am besten vor?

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null  
$name = [Microsoft.VisualBasic.Interaction]::InputBox("Bitte Computernamen eingeben:")  
$computerName = Get-WmiObject Win32_ComputerSystem
$computerName.Rename($name)

if ($name -eq $null) {
    [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null  
    $name = [Microsoft.VisualBasic.Interaction]::InputBox("Bitte Computernamen eingeben:")  
    $computerName = Get-WmiObject Win32_ComputerSystem
    $computerName.Rename($name)
    }
else {
    Write-Host ""  
    }
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 328109

Url: https://administrator.de/forum/powershell-computernamen-eingeben-328109.html

Ausgedruckt am: 14.05.2025 um 08:05 Uhr

SlainteMhath
SlainteMhath 01.02.2017 um 10:33:37 Uhr
Goto Top
Moin,

etwa so:

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null  

do  {
    $name = [Microsoft.VisualBasic.Interaction]::InputBox("Bitte Computernamen eingeben:")  
}
while ($name -eq $null)

    $computerName = Get-WmiObject Win32_ComputerSystem
    $computerName.Rename($name)

lg,
slainte
132272
Lösung 132272 01.02.2017 um 10:36:00 Uhr
Goto Top
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null  
$name = ""  
while($name -eq ""){  
    $name = [Microsoft.VisualBasic.Interaction]::InputBox("Bitte Computernamen eingeben:")  
}
write-host $name
Gruß
honeybee
honeybee 01.02.2017 aktualisiert um 10:39:30 Uhr
Goto Top
Danke für die Antwort. Es kommt immer noch diese Fehlermeldung, wenn ich auf "Abbrechen" gehe oder nichts eingebe und trotzdem auf "OK" klicke. Die Eingabemeldung wird nicht noch einmal angezeigt.
screenshot
132272
132272 01.02.2017 aktualisiert um 10:43:07 Uhr
Goto Top
Ist doch logisch warum, schau mal zu den Parametern in die Doku:
https://msdn.microsoft.com/en-us/library/aa393056(v=vs.85).aspx

Warum nimmst du nicht gleich Rename-Computer???
SlainteMhath
SlainteMhath 01.02.2017 um 10:44:35 Uhr
Goto Top
evtl. musst du prüfen ob $name $null oder "" ist. Optional kannst du auch ein Try..catch um den WMI aufruf drum rum machen.
132272
132272 01.02.2017 aktualisiert um 10:47:17 Uhr
Goto Top
Zitat von @SlainteMhath:
evtl. musst du prüfen ob $name $null
$Null funktioniert hier nicht, da ein leerer String vom Dialog zurückgegeben wird. Deswegen habe ich das oben ja extra mit "" gemacht face-wink.
SlainteMhath
SlainteMhath 01.02.2017 um 10:54:03 Uhr
Goto Top
$Null funktioniert hier nicht,...
und wieder was gelernt face-smile
honeybee
honeybee 01.02.2017 um 10:55:11 Uhr
Goto Top
Danke! Es hat geklappt. Das Skript, welches meine Anforderungen erfüllt, sieht so aus:

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null   
$name = ""   
while($name -eq ""){   
    $name = [Microsoft.VisualBasic.Interaction]::InputBox("Bitte Computernamen eingeben:")   
}
$computerName = Get-WmiObject Win32_ComputerSystem 
$computerName.Rename($name)


Warum nimmst du nicht gleich Rename-Computer???

Weil es anscheinend in Windows 7 nicht funktioniert. Habe diese Meldung bekommen:

Die Benennung "Rename-Computer" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
132272
132272 01.02.2017 aktualisiert um 11:00:44 Uhr
Goto Top
Zitat von @honeybee:
Weil es anscheinend in Windows 7 nicht funktioniert. Habe diese Meldung bekommen:
Wenn du dort noch die alte PS 2.0 nutzt dann klar face-wink

Rename-Computer
This cmdlet was introduced in Windows PowerShell 3.0.
AnkhMorpork
AnkhMorpork 01.02.2017 um 12:54:32 Uhr
Goto Top
@honeybee
Nur als Anregung, falls du mal "PS-only" Inputboxen erstellen willst:

$global:x = ''  
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")   
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")   

$objForm = New-Object System.Windows.Forms.Form 
$objForm.Text = "Eingabe-Form"  
$objForm.Size = New-Object System.Drawing.Size(300,200) 
$objForm.StartPosition = "CenterScreen"  


$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter")   
    {$global:x=$objTextBox.Text;$objForm.Close()}})
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape")   
    {$objForm.Close()}})

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"  
$OKButton.Add_Click({$global:x=$objTextBox.Text;$objForm.Close()})
$objForm.Controls.Add($OKButton)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"  
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,20) 
$objLabel.Size = New-Object System.Drawing.Size(280,20) 
$objLabel.Text = "Bitte Computernamen eingeben:"  
$objForm.Controls.Add($objLabel) 

$objTextBox = New-Object System.Windows.Forms.TextBox 
$objTextBox.Location = New-Object System.Drawing.Size(10,40) 
$objTextBox.Size = New-Object System.Drawing.Size(260,20) 
$objForm.Controls.Add($objTextBox) 

$objForm.Topmost = $True

$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()

$global:x

Gruß

Ankh