honeybee
Goto Top

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 ""  
    }

Content-Key: 328109

Url: https://administrator.de/contentid/328109

Printed on: April 19, 2024 at 21:04 o'clock

Member: SlainteMhath
SlainteMhath Feb 01, 2017 at 09:33:37 (UTC)
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
Mitglied: 132272
Solution 132272 Feb 01, 2017 at 09:36:00 (UTC)
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ß
Member: honeybee
honeybee Feb 01, 2017 updated at 09:39:30 (UTC)
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
Mitglied: 132272
132272 Feb 01, 2017 updated at 09:43:07 (UTC)
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???
Member: SlainteMhath
SlainteMhath Feb 01, 2017 at 09:44:35 (UTC)
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.
Mitglied: 132272
132272 Feb 01, 2017 updated at 09:47:17 (UTC)
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.
Member: SlainteMhath
SlainteMhath Feb 01, 2017 at 09:54:03 (UTC)
Goto Top
$Null funktioniert hier nicht,...
und wieder was gelernt face-smile
Member: honeybee
honeybee Feb 01, 2017 at 09:55:11 (UTC)
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.
Mitglied: 132272
132272 Feb 01, 2017 updated at 10:00:44 (UTC)
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.
Member: AnkhMorpork
AnkhMorpork Feb 01, 2017 at 11:54:32 (UTC)
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