none
Ene Funktion zwei Verhaltensweisen RRS feed

  • Frage

  • Hallo,

    ich habe habe folgende Zeile Code:

    $userDaten = Get-Mailbox -ResultSize Unlimited | Select SamAccountName,PrimarySmtpAddress | out-String 

    Rufe ich Sie so auf gibt sie alle SamAccountNamen und alle eMail-Adressen wieder.

    Wenn ich die funktion in eine .ps1 speichere und verscuhe Sie via WinRM (Windows Remoteverwaltung) aufzurufen bekomme ich folgende Fehlermeldung

    Get-Mailbox : Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    In C:\temp\UserReadAll.ps1:3 Zeichen:14
    + $userDaten = Get-Mailbox -ResultSize Unlimited | Select 
    SamAccountName,PrimarySm ...
    +              ~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], NullReferenceException
        + FullyQualifiedErrorId : System.NullReferenceException

    Ich verstehe nicht warum ? Es macht doch keinen Sinn, dass eine Funktion mal das Gewünschte ergebnis und mal NUll zurück gibt, je nach dem wie man es aufrruft?

    Könnt iht mir da hlefen?

    LG

    Mittwoch, 14. Juni 2017 09:42

Antworten

  • Warum die Fehlermeldung bei dem Lokalen User kommt ist mir jetzt auch klar.. Wer lesen kann...

    - Kerberos akzeptiert Domnenbenutzernamen, aber keine lokale Benutzernamen.

    Deswegen funktioniert die Anmeldung nur mit dem Domönaccount. Allerdings bin ich mit dem Domänaccount leider kein Stück weiter gekommen :/

    Ich schaffe es nicht eine neue PSSession zu starten.. Worran kann das liegen?

    Ich kann man mich via WinRM WSMan und Kerberos von einer anderen Domäne einwählen. Nur nicht die Exchange Session öffnen um dann letzendlich das Skript aufzurufen..

    Montag, 19. Juni 2017 12:28

Alle Antworten

  • Moin,

    Dein Problem ist vermutlich der fehlende Exchange-Endpoint beim Remote-Aufruf. Wenn Du Exchange-Cmdlets remote nutzen willst, so musst Du eine entsprechende Remoting-Session aufbauen: https://technet.microsoft.com/de-de/library/dd335083(v=exchg.160).aspx

    Einfach WinRM wird nicht funktionieren, denn da wird der Default Endpoint geladen.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Mittwoch, 14. Juni 2017 09:45
  • Habe mir das mal angeschut und dierekt mal umgesetzt, allerdings ist das nicht ganz wonach ich suche.Ich habe auf Server A meine Anwenung und auf Server B meinen Exchange Server.

    Server A kann via WinRM Skripte auf Server B ausführen und derren STDOUT lesen.
    Und da hinkt es leider.

    Ich möchte mich ja nicht via PowerShell mit dem Anderen PC verbinden.

    Ich hoffe du verstehst was ich versuche zu erklären.

    LG

    Mittwoch, 14. Juni 2017 09:55
  • Dann musst Du den Verbindungsaufbau wie beschrieben an den Anfang Deines Skriptes setzen, auch wenn es gegen die gleiche Maschine geht.

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Mittwoch, 14. Juni 2017 10:00
  • $UserCredential = Get-Credential
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<FQDN of Exchange 2016 Mailbox server>/PowerShell/ -Authentication Kerberos -Credential $UserCredential
    
    Import-PSSession $Session
    
    $userDaten = Get-Mailbox -ResultSize Unlimited | Select SamAccountName,PrimarySmtpAddress | out-String 
    
    Remove-PSSession $Session
    
    
    
    

    So habe ich das Problem, dass ich für das Skript Usernamen sowie Password eingeben muss.

    Aber dürch die WinRM Authorieserung habe ich doch schon das Rechte dieses Skipt auszuführen


    Mittwoch, 14. Juni 2017 10:55
  • dann lass Credentials weg ;-)

    Sowohl den Get-Credentials aufruf als auch den -Credential Parameter.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Mittwoch, 14. Juni 2017 11:10
  • Wenn ich das mache wird das Programm zwar ausgeführt allerdings bekomme ich diesen Feheler Code:

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe : New-PSSession : [Meine-Domäne.com] Beim Verbinden mit dem Remoteserver 
    In Zeile:1 Zeichen:1
    + C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "C:\Pro ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (New-PSSession :...m Remoteserver :String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError
     
    "Meine-Domäne.com" ist folgender Fehler aufgetreten: Der WinRM-Client hat 
    einen HTTP-Statuscode "403" vom Remote-WS-Verwaltungsdienst erhalten. Weitere 
    Informationen finden Sie im Hilfethema "about_Remote_Troubleshooting".
    In C:\temp\UserReadAll.ps1:1 Zeichen:12
    + $Session = New-PSSession -ConfigurationName Microsoft.Exchange 
    -ConnectionUri ht ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ~~~
        + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:Re 
       moteRunspace) [New-PSSession], PSRemotingTransportException
        + FullyQualifiedErrorId : -2144108273,PSSessionOpenFailed
    Import-PSSession : Das Argument fr den Parameter "Session" kann nicht 
    berprft werden. Das Argument ist NULL. Geben Sie einen gltigen Wert fr das 
    Argument an, und fhren Sie den Befehl erneut aus.
    In C:\temp\UserReadAll.ps1:2 Zeichen:18
    + Import-PSSession $Session
    +                  ~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Import-PSSession], ParameterBi 
       ndingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power 
       Shell.Commands.ImportPSSessionCommand
     
    SamAccountName;PrimarySmtpAddress
    exampe1;exampe1@exampe.com
    exampe2;exampe2@exampe.com
    exampe3;exampe3@exampe.com
    exampe4;exampe4@exampe.com
    exampe5;exampe5@exampe.com
    Remove-PSSession : Das Argument fr den Parameter "Id" kann nicht berprft 
    werden. Das Argument ist NULL. Geben Sie einen gltigen Wert fr das Argument 
    an, und fhren Sie den Befehl erneut aus.
    In C:\temp\UserReadAll.ps1:59 Zeichen:18
    + Remove-PSSession $Session
    +                  ~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Remove-PSSession], ParameterBi 
       ndingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power 
       Shell.Commands.RemovePSSessionCommand
    Intressanter weise steht das Ergbenis das ich habnen möchte mitten in den Fehlermeldungen. Leider konnte ich das über WINrm nicht starten sondern musste es über die Console starten, da Servers A Anwendung eine Fehlermeldung als fehlschlag interpretiert.

    Mittwoch, 14. Juni 2017 11:27
  • Weiß keiner Bescheid? Hänge da fest..

    @Evgenij Smirnov Es liegt defintiv nicht an diesem

    New-PSSession und Exit-PSSession 

    Da ich ein Skript problemlos ausführen kann, welches ohne die zusätzlichen Exchange-Komponnenten auskommt. Es liegt auch nicht an verscheidenen Aufrufen ich benutzte einz zu eins den Befehl, denn ich in Die Batch-Konsole eintrage zum Programmstart bei beiden Servern.

    LG


    Freitag, 16. Juni 2017 10:58
  • Moin,

    sorry, das ist mir ein wenig zu abstrakt. Wie könnte ich das konkret nachstellen? Welchen WinRM-Aufruf tätigst Du da genau? Liegt das Skript bereits auf dem Exchange-Server?


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Freitag, 16. Juni 2017 12:04
  • Entschuldige - Wo bleibt meine Höfflichkeit?

    Guten Morgen!

    Auf dem Exchange Server liegt das Skript.

    Und die Anwendung auf einem anderen Server. Die Anwendung ist in der lage Batch Aufrufe auf dem Ex-Server zu tätigen - über WinRM und WSMan.

    Mit diesem Aufruf erhoffe ich mir den Start des Skriptes:

    PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Psc1" -Command ". '<path/MyScript.ps1'"

    Was klappt solange ich mit MS Remotedesktopverknüppfung eine CMD-Konsole öffne und den Code eintippe.

    Möchte ich es aber über meine Anwendung starten erhalte ich diese Fehlermeldung:

    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
     
    In Zeile:1 Zeichen:1
    + .'C:\pfad\MyScript.ps1'
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorExcep 
       tion
        + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio 
       n,UserReadAll.ps1

    Obwohl die Anwendung sich über WinRM mit dem Admin-Account anmeldet.

    Hoffe ich konnte dir jetzt näher bringen, was mein Problem ist :)


    Freitag, 16. Juni 2017 12:12
  • Obwohl die Anwendung sich über WinRM mit dem Admin-Account anmeldet.

    Hoffe ich konnte dir jetzt näher bringen, was mein Problem ist :)


    ...ich weiß aber immer noch nicht, wie ich das nachstellen kann, ohne Deine Anwendung zur Hand zu haben. Wäre es so etwas wie

    winrs -r:EXCHANGESERVER powershell -file C:\SCRIPT.PS1

    ?

    EDIT Vielleicht als Test: Nimm mal den PSConsoleFile-Quatsch raus, ist eh unsupported. 


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    Freitag, 16. Juni 2017 12:25
  • OK, ich sehe was Du siehst. Das Problem ist, dass eine WinRM-Sitzung keine "Logonsitzung" ist und somit die Credentials nicht in eine weitere WinRM-Sitzung übergeben werden können.

    Ein Quick & Dirty wäre folgendes:

    • Auf dem Exchange Server als der User anmelden, in dessen Context die WinRM-Sitzung aufgebaut wird
    • Get-Credential | Export-CLIXML c:\pfad\creds.xml absetzen und die Anmeldung inklusive Domäne eingeben (Benefit dabei: Es kann auch ein anderer User sein ;-) )
    • Am Anfang des Skriptes $creds = Import-CLIXML c:\pfad\creds.xml ausführen und im New-Session-Aufruf dann mit -Credential $creds arbeiten.

    Das habe ich gerade getestet, funktioniert:

    Wie man das "richtig" gelöst bekommt, ist mir allerdings noch nicht ganz klar.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Freitag, 16. Juni 2017 12:49
  • Oh Sry hatte zu lange nicht neu geladen :)

    Perfekt das klingt gut. Könntest du mir noch dein Code Beispiel geben? Ich bin nicht sonderlich Gut in PowerShell und es würdemir sehr helfen!

    Ich danke dir auf jeden Fall für diese Tolle antwort und deine Bemühungen!

    Freitag, 16. Juni 2017 13:13
  • Bei mir funktioniert es warum auch immer trotzdem nicht :/

    Ich habe folgenden Code

    $UserCredential = Import-Clixml C:\path\creds.xml
    
    $session =  New-PSSession -Credential $UserCredential
    Import-PSSession $session

    Müsste doch eigentlich funktionieren oder muss noch mehr  in die New-PSSession anweisung?

    Freitag, 16. Juni 2017 13:29
  • Naja, der Exchange-Endpoint muss nach wie vor rein. Also praktisch

    $creds = Import-CLIXML c:\pfad\creds.xml
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://ExchangeServer/PowerShell/ -Authentication Kerberos -Credential $creds


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Freitag, 16. Juni 2017 13:51
  • Okay danke habe ich jetzt eingerichtet allerdings bekomme ich jetzt wieder eine neue Fehlermeldung:

    New-PSSession : [example@example.com] Beim Verbinden mit dem Remoteserver 
    "example@example.com" ist folgender Fehler aufgetreten: Der 
    WS-Verwaltungsdienst kann die Anforderung nicht verarbeiten. Die 
    Microsoft.Exchange-Sitzungskonfiguration kann im WSMan:-Laufwerk auf dem 
    example@example.com-Computer nicht gefunden werden. Weitere Informationen 
    finden Sie im Hilfethema "about_Remote_Troubleshooting".
    In C:\path\Skript.ps1:3 Zeichen:12
    + $session = New-PSSession -ConfigurationName Microsoft.Exchange -ComputerName 
    "wi ...

    Irgendwie will es einfach nicht klappen :/

    Freitag, 16. Juni 2017 14:06
  • poste doch mal den ganzen Befehl bzw. den Beginn des Skriptes bis zumn Session-Import. Und wenn da der interne Name Deines Exchange-Servers steht, wen interessiert's wirklich.

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Freitag, 16. Juni 2017 14:14
  • Hast du wahrscheinlich recht..

    $UserCredential = Import-Clixml C:\temp\creds.xml
    $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://example@example.com/PowerShell/ -Authentication Kerberos -Credential $UserCredential
    
    Import-PSSession $session

    Aber erstaunlicherweise ist die Fehlermeldung oben verschwunden und es kommt jetzt die von ganz am anfang mit: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.


    Freitag, 16. Juni 2017 14:19
  • Ich weiß gar nicht ob das noch in diesen Thread gehört oder das schon ein neues Problem ist..

    Auf jeden Fall war ich selten so unselbstständig...

    Ich habe nun Folgenden Code zur Anmeldeung

    $username       =   "Domaene\Administrator"
    $password       =   "myP@ssw0rd"
    $secureStringPwd =  $password | ConvertTo-SecureString -AsPlainText -Force 
    $UserCredential =   New-object -typename System.Management.Automation.PSCredential -argumentlist $username,$secureStringPwd
    $session        =  New-PSSession -ConfigurationName Microsoft.Exchange -ComputerName MyCompuerName -Authentication Kerberos -Credential $UserCredential

    (Ich habe das Password jetzt in meinem Skript drinnen um die Fehlerquelle Falscher Import zu vermeiden.)

    Benutze ich den Domän-Administrator bekomme ich folgende Fehlermeldung:

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe : New-PSSession :[serverName.com] Beim Verbinden mit dem Remoteserver [serverName.com] ist folgender Fehler aufgetreten: Der 
    WS-Verwaltungsdienst kann die Anforderung nicht verarbeiten. Die 
    Microsoft.Exchange-Sitzungskonfiguration kann im WSMan:-Laufwerk auf dem 
    wis-mail.wis.local-Computer nicht gefunden werden. Weitere Informationen 
    finden Sie im Hilfethema "about_Remote_Troubleshooting".
    In C:\temp\UserReadAll.ps1:21 Zeichen:24

    Verwende ich den Lokalen Administartor dann bekomme ich diese Fehlermeldung

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe : New-PSSession : [myExampleServer.com] Beim Verbinden mit dem Remoteserver "myExampleServer.com" ist folgender Fehler aufgetreten: Die Anforderung kann von WinRM nicht verarbeitet werden. Bei Verwendung der Kerberos-Authentifizierung ist der folgende Fehler mit Fehlercode 0x80090311 aufgetreten: Es sind momentan keine Anmeldeserver zum Verarbeiten der Anmeldeanforderung verfgbar. . M”gliche Ursachen: - Der angegebene Benutzername oder das angegebene Kennwort ist ungltig. - Kerberos wird verwendet, wenn keine Authentifizierungsmethode und kein Benutzername angegeben werden. - Kerberos akzeptiert Dom„nenbenutzernamen, aber keine lokale Benutzernamen. - Der Dienstprinzipalname (Service Principal Name, SPN) fr den Remotecomputernamen und -port ist nicht vorhanden. - Der Clientcomputer und der Remotecomputer befinden sich in unterschiedlichen Dom„nen, zwischen denen keine Vertrauensbeziehung besteht. Wenn Sie die oben genannten Ursachen berprft haben, probieren Sie folgende Aktionen aus: - Suchen Sie in der Ereignisanzeige nach Ereignissen im Zusammenhang mit der Authentifizierung. - Žndern Sie die Authentifizierungsmethode; fgen Sie den Zielcomputer der Konfigurationseinstellung "TrustedHosts" fr WinRM hinzu, oder verwenden Sie den HTTPS-Transport. Beachten Sie, dass Computer in der TrustedHosts-Liste m”glicherweise nicht authentifiziert sind. - Fhren Sie den folgenden Befehl aus, um weitere Informationen zur WinRM-Konfiguration zu erhalten: "winrm help config". Weitere Informationen finden Sie im Hilfethema "about_Remote_Troubleshooting". In C:\temp\UserReadAll.ps1:21 Zeichen:24 + $session = New-PSSession -ConfigurationName Microsoft.Exchange -Comp ...

    Habe schon dieses TroubleShooting ausprobiert aber hat alles nichts geholfen. Es kann doch nicht so Schwer sein. Schließlich greife ich doch auch über die MS Remotedesktopverbindung auf den Server zu und kann mich anmelden. Wieso dann nicht via Shell?

    Kann mir irgender einen Duntzbereich sagen, wo der Fehler liegen könnte?

    Ich wäre über eine Antwort sehr dankbar.

    LG

    Montag, 19. Juni 2017 09:15
  • Warum die Fehlermeldung bei dem Lokalen User kommt ist mir jetzt auch klar.. Wer lesen kann...

    - Kerberos akzeptiert Domnenbenutzernamen, aber keine lokale Benutzernamen.

    Deswegen funktioniert die Anmeldung nur mit dem Domönaccount. Allerdings bin ich mit dem Domänaccount leider kein Stück weiter gekommen :/

    Ich schaffe es nicht eine neue PSSession zu starten.. Worran kann das liegen?

    Ich kann man mich via WinRM WSMan und Kerberos von einer anderen Domäne einwählen. Nur nicht die Exchange Session öffnen um dann letzendlich das Skript aufzurufen..

    Montag, 19. Juni 2017 12:28