2010-07-09 11 views
3

Je suis très nouveau sur PS alors je pense qu'il me manque quelque chose de basique ici. Je peux faire une session de Powershell à distance comme ça ...Créer une session PowerShell distante dans C#?

$Session = New-PSSession -ConfigurationName Microsoft.Exchange 
          -ConnectionUri https://remote.com/Powershell 
          -Credential "Domain\Admin" 

Je veux l'équivalent en C#, donc je suis en train cela, mais ça ne marche pas ...

WSManConnectionInfo connInfo = new WSManConnectionInfo(
    new Uri("https://remote.com/Powershell"), /* uri */ 
    "/wtf",      /* shellUri??? */ 
    cred);          /* ps-credential */ 

using (Runspace runspace = RunspaceFactory.CreateRunspace(connInfo)) 
{ 
    runspace.Open(); 
    using (PowerShell ps = PowerShell.Create()) 
    { 
     ps.Runspace = runspace; 
    } 
} 

Cela échoue avec ...

System.Management.Automation.Remoting.PSRemotingTransportException was unhandled 
    Message=Connecting to remote server failed with the following error message : The WS-Management service cannot process the request. The resource URI (/wsman) was not found in the WS-Management catalog.... 

Comment puis-je traduire cela en C#? Qu'est-ce que le paramètre "shellUri" et comment transmettre le nom de la configuration (Microsoft.Exchange dans mon cas)?

Répondre

1

J'utiliser quelque chose comme

int iRemotePort = 5985; 
string strShellURI = @"http://schemas.microsoft.com/powershell/Microsoft.PowerShell"; 
string strAppName = @"/wsman"; 
AuthenticationMechanism auth = AuthenticationMechanism.Negotiate; 

WSManConnectionInfo ci = new WSManConnectionInfo(
    false, 
    sRemote, 
    iRemotePort, 
    strAppName, 
    strShellURI, 
    creds); 
ci.AuthenticationMechanism = auth; 

Runspace runspace = RunspaceFactory.CreateRunspace(ci); 
runspace.Open(); 

PowerShell psh = PowerShell.Create(); 
psh.Runspace = runspace; 

Avec cela, vous avez accès à la session de Powershell à distance .. Utilisez PSH pour exécuter des commandes à distance.