Fragensteller
Powershell System.Int32 Fehlermeldung

Allgemeine Diskussion
-
Hallo an alle,
ich möchte mit einen Rutsch zig MSA´s anlegen. Hierzu habe ich mir gedacht nehme ich doch Powershell:
Leider stoße ich immer auf den Fehler "System.Int32"
Mein Skript sieht wie folgt aus:
$computername= "testserver" $Instanzarray= @("Instanz 1","Instanz 2") foreach ($i in $Instanzarray){ Write-Host "Anfang von: " $i ($i).substring(0,($i).IndexOf('-')).gettype().ToString()-$computername.ToString() #New-ADServiceAccount -Name ($i).substring(0,($i).IndexOf('-'))-$computername -Description "Managed Service Account for SQL Server $computername\$i" -DisplayName "$computername\$i" -RestrictToSingleComputer -Enabled $true #Add-ADComputerServiceAccount -Computer $computername -serviceAccount ($i).substring(0,($i).IndexOf('-'))-$computername Write-Host "Ende von: " $i }
Wie ihr seht habe ich es auch schon mit "ToString" versucht jedoch auch ohne Erfolg.
Wieso tritt der Fehler auf? Was mach ich falsch?
- Typ geändert Denniver ReiningMVP, Moderator Freitag, 13. März 2020 11:18 .....
Alle Antworten
-
In Deinem Substring-Gehirn-Verknotungs-Konstrukt versuchst Du mit .IndexOf('-') zu ermitteln, an welcher Stelle ein "Minus" zu finden ist .... da ist aber gar kein "Minus". ;-) :-D
Was willst Du eigentlich mit diesem Monstrum erreichen?
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Montag, 9. März 2020 13:32
-
Hallo BOfH-666 ja das ist richtig! Ich hatte es wieder gut gemeint und das Array noch mal vorher angepasst. Im eigentlichen Array stehen "-" drin.
$Instanzarray= @("start-server1","start-2")
Entschuldigung! Jetzt ist der Bindestrich da. Ziel ist es die beiden Auskommentierten Anweisungen zum Managed Service Account zu bestücken.
-
Die Frage ist eher, was willst du mit "Gettype().ToString()"!
"IndexOf" liefert dir einen Int-Wert der Position.
GetType() liefert dir den Typ des Ergebnisses, also Int.
ToString() liefert dir nun den Namen des Type's, also "Int".
Von diesem Namen versucht du den Namen des Computers abzuziehen, also quasi "Apfel - Birne".Aber was willst du eigentlich?
$Arr = $i.Split("-")
$arr[0].Trim() enthält den 1. Teil, $arr[1].Trim() den 2. Teil.
Ist $arr.length = 1, ist kein 2. Teil vorhanden.
- Bearbeitet Der Suchende Montag, 9. März 2020 15:36
-
Ziel ist es die beiden Auskommentierten Anweisungen zum Managed Service Account zu bestücken.
Häh? ;-) :-D ... neee ... ich meinte doch nur die String-Acrobatik. :-D
Versteh ich das richtig - Du möchtest die MSA's quasi "start-<ComputerName>" nennen?
Warum dann nicht einfach
"start-{0}" -f $ENV:ComputerName
?? ;-)
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Montag, 9. März 2020 15:47
-
Hallo an alle,
$computername= "testserver" $Instanzarray= @("start-server1","startx-2") foreach ($i in $Instanzarray){ Write-Host "Anfang von: " $i #($i).substring(0,($i).IndexOf('-')).gettype().ToString()-$computername.ToString() $test = ($i).substring(0,($i).IndexOf('-')) #-$computername $test = $test +"-"+$computername #oder: $test = ($i).substring(0,($i).IndexOf('-')) +"-"+$computername #write-Host $test Write-Host New-ADServiceAccount -Name `"$test`" -Description "Managed Service Account for SQL Server $test" -DisplayName `"$test`" -RestrictToSingleComputer -Enabled $true Write-Host Add-ADComputerServiceAccount -Computer $computername -serviceAccount $test #New-ADServiceAccount -Name ($i).substring(0,($i).IndexOf('-'))-$computername -Description "Managed Service Account for SQL Server $computername\$i" -DisplayName "$computername\$i" -RestrictToSingleComputer -Enabled $true #Add-ADComputerServiceAccount -Computer $computername -serviceAccount ($i).substring(0,($i).IndexOf('-'))-$computername Write-Host "Ende von: " $i }
nach längeren Überlegungen ist es mir eingefallen.
In diesem Konstrukt von wahrscheinlich zu früh aufstehen (?!)
($i).substring(0,($i).IndexOf('-')).gettype().ToString()-$computername.ToString()
wird das Verbindungszeichen - als Rechenzeichen gesehen und rechnen kann man nur mit Zahlen.
Mein Ziel war es aber "start-Testsever" zu erhalten.
Wenn ihr aber weiterhin mögt könnt ihr mir gerne Verbesserungsvorschläge senden. Man lernt ja nie aus!
-
Mein Ziel war es aber "start-Testsever" zu erhalten.
Meinen Verbesserungvorschlag dafür hatte ich Dir oben ja schon gepostet. Wenn Du Deine Methode benutzt und Du in Deinem $Instanzarray zwei Strings mit "Start-" am Anfang drin hast und über dieses Array eine Schleife laufen lässt, die daraus und aus dem ComputerNamen etwas bastelt, wirst Du spätestens beim zweiten Durchlauf einen Fehler erhalten, weil das Konstrukt aus "Start-" und ComputerName beim zweiten Durchlauf das gleiche ist, wie beim ersten Durchlauf. Es ist also nicht nur ein Syntax-Fehler sondern auch ein Logik-Fehler.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Dienstag, 10. März 2020 02:10
-
Ich verstehe auch noch nicht wirklich, was eigentlich das Ziel ist...
> $test = ($i).substring(0,($i).IndexOf('-')) #-$computername
Substring ist irgendwie von gestern...
PS C:\WINDOWS\system32> $i -match '^(?<Prefix>.*)-' True PS C:\WINDOWS\system32> $matches.Prefix startx
> ($i).substring(0,($i).IndexOf('-')).gettype().ToString()-$computername.ToString()
Klar wird das als Rechenzeichen gesehen, was auch sonst? Was Du hier allerdings mit GetType() erreichen wolltest, ist unklar. Und warum Du Strings noch mal ToString() castest, ebenfalls :-)
Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
- Bearbeitet Martin Binder Dienstag, 10. März 2020 11:57