heuristiker
Goto Top

PowerShell - Out-Lineoutput-Fehlermeldung - Lösungshinweise werden erbeten

Hallo zusammen,

ich erhalte in PowerShell beim Auslesen von Elementen aus einer Berechtigungsgruppe folgende Fehlermeldung:

out-lineoutput : Das Objekt vom Typ "Microsoft.PowerShell.Commands.Internal.Format.FormatStartData" ist ungültig oder befindet sich nicht an der richtigen Position in der Sequenz. Ursache ist wahrscheinlich ein vom Benutzer angegebener Befehl "format-table", der zu Konflikten mit der Standardformatierung führt.
+ CategoryInfo : InvalidData: (face-smile [out-lineoutput], InvalidOperationException
+ FullyQualifiedErrorId : ConsoleLineOutputOutOfSequencePacket,Microsoft.PowerShell.Commands.OutLineOutputCommand



Der Fehler wird an der Stelle geworfen, an der ich eine Bildschirmausgabe der Variablen $nutzerZwei machen möchte.

foreach ($mitglied in $mitglieder) {
			
	$name = $mitglied.name  
	$samZwei = $mitglied.SamAccountname 
	$dn = $mitglied.distinguishedName
	$nutzerZwei += new-object PSObject -property @{Name=“$name“;sAMAccountName=“$samZwei“;distinguishedName=“$dn“}
									
	}

write-host "Folgende Mitarbeiter sind aktuell auf das Postfach" $postfachobjekt "direkt berechtigt:" # Zeichenkettenausgabe  
$nutzerZwei | sort-object name -unique | ft -autosize 

Ich verstehe das Problem nicht, wieso PowerShell mit der Formatierung nicht zurecht kommt. In $nutzerZwei stehen tatsächlich Werte, welche aber unschön ausgegeben werden, wenn ich lediglich ein write-host davorsetze ohne Formatierung.

Um eure Unterstützung wird gebeten. Vielen Dank!

Heuristiker

Content-ID: 499037

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

Ausgedruckt am: 26.11.2024 um 16:11 Uhr

140913
140913 27.09.2019 aktualisiert um 10:05:18 Uhr
Goto Top
@{Name=“$name“;sAMAccountName=“$samZwei“;distinguishedName=“$dn“}
Schau dir mal die Anführungszeichen an, das sind typograpische anstatt normale wie die hier " ". Btw. sind die hier um die Variablen nat. überflüssig.
emeriks
emeriks 27.09.2019 um 10:03:36 Uhr
Goto Top
Zitat von @140913:
Schau dir mal die Anführungszeichen an, das sind typograpische anstatt normale wie die hier " ".
Ja, und nicht nötig.
$nutzerZwei += new-object PSObject -property @{ Name=$name; sAMAccountName=$samZwei; distinguishedName=$dn }
Heuristiker
Heuristiker 27.09.2019 aktualisiert um 10:10:35 Uhr
Goto Top
Hallo psuser,
hallo emeriks,

danke für eureAntworten! Leider hat die Änderung oder Weglassung der Anführungszeichen gar nichts geändert an der Fehlermeldung. Es ist immer noch dieselbe.
emeriks
emeriks 27.09.2019 um 10:10:47 Uhr
Goto Top
Schau Dir doch die erzeugten Objekte erstmal an mit
$nutzerZwei | FL
Was kommt dabei heraus? Irgendwas verdächtiges, was Du nicht erwartet hast?
140913
140913 27.09.2019 aktualisiert um 10:13:15 Uhr
Goto Top
Zitat von @Heuristiker:

Hallo psuser,
hallo emeriks,

danke für eureAntworten! Leider hat die Änderung oder Weglassung der Anführungszeichen gar nichts geändert an der Fehlermeldung. Es ist immer noch dieselbe.
Ist die Variable $nutzerzwei zu Beginn for der Foreach Schleife überhaupt richtig als leeres Array initialisiert worden?
So:
$nutzerzwei = @()
Heuristiker
Heuristiker 27.09.2019 aktualisiert um 10:23:36 Uhr
Goto Top
@140913: Ja, ist sie.
Heuristiker
Heuristiker 27.09.2019 um 10:20:40 Uhr
Goto Top
Hallo emeriks,

$nutzerZwei | FL erzeugt dieselbe Fehlermeldung wie oben schon beschrieben. Mein Kollege weiß gerade auch nicht weiter. Sehr merkwürdig.
emeriks
emeriks 27.09.2019 aktualisiert um 10:23:47 Uhr
Goto Top
Und das...?
$nutzerZwei | %{$_}

Edit
bzw. einfach nur
$nutzerZwei
140913
140913 27.09.2019 um 10:23:27 Uhr
Goto Top
$nutzerzwei.getType()
140913
140913 27.09.2019 um 10:25:48 Uhr
Goto Top
Heuristiker
Heuristiker 27.09.2019 aktualisiert um 10:30:35 Uhr
Goto Top
$nutzerZwei | %{$_} funktioniert (irgendwie) und spuckt folgendes aus:

sAMAccountName    : XXX
Name              : XXX
distinguishedName : XXX


sAMAccountName    : XXX
Name              : XXX
distinguishedName : XXX


sAMAccountName    : XXX
Name              : XXX
distinguishedName : XXXe


sAMAccountName    : XXX
Name              : XXX
distinguishedName : XXX


Module                     : CommonLanguageRuntimeLibrary
Assembly                   : mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=XXX
TypeHandle                 : System.RuntimeTypeHandle
DeclaringMethod            :
BaseType                   : System.Array
UnderlyingSystemType       : System.Object
FullName                   : System.Object
AssemblyQualifiedName      : System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=XXX
Namespace                  : System
GUID                       : 00000000-0000-0000-0000-000000000000
GenericParameterAttributes :
IsGenericTypeDefinition    : False
IsGenericParameter         : False
GenericParameterPosition   :
IsGenericType              : False
ContainsGenericParameters  : False
StructLayoutAttribute      :
Name                       : Object
MemberType                 : TypeInfo
DeclaringType              :
ReflectedType              :
MetadataToken              : XXX
TypeInitializer            :
IsNested                   : False
Attributes                 : AutoLayout, AnsiClass, Class, Public, Sealed, Serializable
IsVisible                  : True
IsNotPublic                : False
IsPublic                   : True
IsNestedPublic             : False
IsNestedPrivate            : False
IsNestedFamily             : False
IsNestedAssembly           : False
IsNestedFamANDAssem        : False
IsNestedFamORAssem         : False
IsAutoLayout               : True
IsLayoutSequential         : False
IsExplicitLayout           : False
IsClass                    : True
IsInterface                : False
IsValueType                : False
IsAbstract                 : False
IsSealed                   : True
IsEnum                     : False
IsSpecialName              : False
IsImport                   : False
IsSerializable             : True
IsAnsiClass                : True
IsUnicodeClass             : False
IsAutoClass                : False
IsArray                    : True
IsByRef                    : False
IsPointer                  : False
IsPrimitive                : False
IsCOMObject                : False
HasElementType             : True
IsContextful               : False
IsMarshalByRef             : False

psuser: getType() probiere ich gleich aus! Danke!

Nachtrag: getType() gibt lediglich die Metadaten aus ab "Module" wie in dem obigen Codeblock.
140913
140913 27.09.2019 aktualisiert um 10:34:08 Uhr
Goto Top
Naja da hast du dein Problem, du mixt Objekte unterschiedlicher Art im gleichen Array.
Du wirst also an irgendeiner Stelle deines Codes einen Fehler haben den wir hier leider nicht sehen können weil der Code nicht komplett ist. Variable vorher schon deklariert and so on
emeriks
emeriks 27.09.2019 um 10:33:36 Uhr
Goto Top
Mal am Rande:
Warum nicht gleich einfach nur
write-host "Folgende Mitarbeiter sind aktuell auf das Postfach" $postfachobjekt "direkt berechtigt:" # Zeichenkettenausgabe  
$mitglieder | sort-object name -unique | ft name, SamAccountname, distinguishedName  -autosize 
?
Ohne das ForEach davor?
140913
140913 27.09.2019 aktualisiert um 10:49:23 Uhr
Goto Top
Jepp ,verstehe den Sinn mit den Custom Object hier auch nicht wirklich zumal diese Variante in dreifacher Hinsicht sehr langsam ist, es reicht ja ein simpler select der Properties...
Aber ich schätze mal der Code ist wieder nicht komplett, so dass wir nicht die Gänze sehen.
Heuristiker
Heuristiker 27.09.2019 um 11:09:41 Uhr
Goto Top
@emeriks: Wirft den gleichen Fehler.

@140913, danke für den Hinweis. Allerdings verstehe ich nicht, dass dieser Teil meines Skripts eigenständig läuft ohne Fehler:

# WR 27. September 2019

Import-Module ActiveDirectory
$ErrorActionPreference = „Silentlycontinue“

write-host „“
$gruppe = read-host „Bitte die gewünschte Gruppe angeben:“
$mitglieder = Get-ADGroupMember „$gruppe“ -recursive
$nutzer =@()
foreach ($mitglied in $mitglieder)
{
$Name = $mitglied.name
$Sam = "bayUnternehmen" + $mitglied.SamAccountname  
$dn = $mitglied.distinguishedName
$nutzer += new-object PSObject -property @{Name=“$name“;sAMAccountName=“$sam“;distinguishedName=“$dn“}

write-host $sam

}

write-host "Folgende Mitarbeiter sind auf das Postfach " $gruppe "direkt berechtigt:"  
$nutzer | sort-object Name -unique | ft -autosize 


write-host „“
write-host "Skript abgearbeitet."  
140913
140913 27.09.2019 aktualisiert um 11:20:52 Uhr
Goto Top
Allerdings verstehe ich nicht, dass dieser Teil meines Skripts eigenständig läuft ohne Fehler:
$ErrorActionPreference = „Silentlycontinue“
Wenn du alles an Fehlern unterdrückst kein Wunder face-smile.

Und tausche die ganzen typographischen Anführungszeichen durch korrekte aus.

Import-Module ActiveDirectory
$gruppe = read-host "Bitte die gewünschte Gruppe angeben"  
$mitglieder = Get-ADGroupMember $gruppe -recursive
write-host "Folgende Mitarbeiter sind auf das Postfach '$gruppe' direkt berechtigt:"  
$mitglieder | sort Name -unique | ft Name,@{n='SamAccountName';e={"bayUnternehmen$($_.SamAccountName)"}},distinguishedName -AutoSize  
emeriks
emeriks 27.09.2019 aktualisiert um 11:14:13 Uhr
Goto Top
Und jetzt nimmst Du das
$ErrorActionPreference = „Silentlycontinue“
raus bzw. änderst es auf
$ErrorActionPreference = „Continue“
um zu sehen, ob da vorher irgendwelche Fehler auftreten. Warum auch immer.
Heuristiker
Heuristiker 27.09.2019 um 11:41:48 Uhr
Goto Top
So, servus nochmals! face-smile

Für eure Beiträge und hilfreichen Tipps bedanke ich mich an dieser Stelle: Herzlichen Dank! Ich denke, ich bin zufrieden mit der folgenden (unformatierten) Ausgabe, die ihre Zwecke erfüllen:

write-host "Folgende Mitarbeiter sind aktuell auf das Postfach" $postfachobjekt "direkt berechtigt:" # Zeichenkettenausgabe  
$nutzerZwei

Ihr seid super!
VG
Heuristiker
emeriks
emeriks 27.09.2019 um 11:48:53 Uhr
Goto Top
Ooch, keine Ursache ...