2017-05-21 1 views
0

Ich sah einige Fragen zu etwas ähnlich wie meine, aber ich denke, dass WebAdministration-Modul-Cmdlets ein bisschen mehr Ambiguität in ihnen haben könnte.Wie kann ich Invoke-Befehl erfolgreich auf einem Remote-Server zu Add-WebConfigurationProperty

Was ich versuche zu tun: Führen Sie die folgenden auf einem Remote-Server:

Remove-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$FBFolderName/User/$Username" -filter "system.webServer/webdav/authoringRules" -name "." 
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$FBFolderName/User/$Username" -filter "system.webServer/webdav/authoringRules" -name "." -value @{users="$DomainUser";access='Read,Write,Source';path='*'} 

Diese arbeiten völlig in Ordnung, wenn ich sie auf dem Server laufen selbst, und auch völlig in Ordnung arbeiten, wenn ich laufen sie interaktiv ein New-PSSession Erstellen

Wenn ich das folgende Skript nicht interaktiv ausführen, aber die Fehler, die ich scheinen erhalten zu hinweisen, dass die diese Befehle lokal ausgeführt, und nicht auf dem Remote-Server in Frage:

$FBFolderName = "FB Demo" 
$Username = "user" 
$AllUsersRole = "DOMAIN\GTM All Users" 
$DomainUser= 'DOMAIN\' + $Username 

$s = New-PSSession -computerName server.domain.local 
$finalcommand = Remove-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$FBFolderName/User/$Username" -filter "system.webServer/webdav/authoringRules" -name "." 
Invoke-Command -Session $s -ScriptBlock { Import-module WebAdministration; $finalcommand } 
$finalcommand = Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$FBFolderName/User/$Username" -filter "system.webServer/webdav/authoringRules" -name "." -value @{users="$DomainUser" access='Read,Write,Source';path='*'} 
Invoke-Command -Session $s -ScriptBlock { $finalcommand } 
Remove-PSSession $s 

Wenn nicht interaktiv ausgeführt wird, erhalte ich folgende Fehlermeldung:

Remove-WebConfigurationProperty : Filename: 
Error: Unrecognized configuration path 'MACHINE/WEBROOT/APPHOST/FB Demo' 
At line:1 char:17 
+ $finalcommand = Remove-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST ... 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : NotSpecified: (:) [Remove-WebConfigurationProperty], FileNotFoundException 
+ FullyQualifiedErrorId : System.IO.FileNotFoundException,Microsoft.IIs.PowerShell.Provider.RemoveConfigurationPropertyCommand 

Dies macht Sinn, dass es eine nicht existierende Sammlung auf dem lokalen Rechner zu finden versucht.

Meine Fragen sind:

  1. Bin ich etwas falsch zu machen dies ermöglichen remote auszuführen?
  2. Bevor ich versuchte, diese Methode zu entwickeln, benutzte ich psexec mit appcmd, um das gleiche zu tun, was funktioniert, aber es dauert lange, bis psexec eine Verbindung herstellt.
  3. Bin ich die falsche Herangehensweise? und gibt es eine bessere Methode, dasselbe auf einem Remote-Server zu tun?

Antwort

0

Ihr Ihren Befehl in einer lokalen Variablen speichern, die in der Remote-Sitzung nicht bekannt ist:

$finalcommand = Remove-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$FBFolderName/User/$Username" -filter "system.webServer/webdav/authoringRules" -name "." 

Speichern Sie alle Ihre Befehle in einer Skript:

$commandScriptBlock= { 
    Import-module WebAdministration 
    Remove-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$FBFolderName/User/$Username" -filter "system.webServer/webdav/authoringRules" -name "." 
    } 

und rufen Sie die Skript über:

Invoke-Command -Session $s -ScriptBlock $commandScriptBlock 

Als Alternative können Sie m ay übergeben Sie auch $finalcommand als ein Argument an das Invoke-Command Cmdlet. Weitere Informationen dazu finden Sie unter link.

+0

Ausgezeichnet. Danke Moerwald! Ich musste weiter forschen, um alles zum Laufen zu bringen, und die Antwort war eine Kombination aus beiden Vorschlägen. Ich werde die vollständige Lösung als eine Antwort für diejenigen, die mit dem gleichen Problem konfrontiert sind, posten. Danke noch einmal! –

1

Für diejenigen neugierig auf die vollständige Lösung. Siehe unten.

Die Syntax für Add-WebConfigurationProperty und Add-WebConfigurationPerty wurde ziemlich mühsam. Hinweis: Achten Sie darauf, nicht unbeabsichtigt ein "/" am Ende von MACHINE/WEBROOT/APPHOST hinzuzufügen. Es wird dich verrückt machen mit irreführenden Fehlern.

$ServerFQDN = "server.domain.local" 
$FBFolderName = "FolderName" # This is the name of your IIS Site 
$Username = "User" 
$DomainUser = "DOMAIN\User" 
$s = New-PSSession -computerName $ServerFQDN 
    $commandScriptBlock = { 
     Import-Module WebAdministration 
     Write-Host "Setting WebDAV Permissions ..." 
     Try { 
      Remove-WebConfigurationProperty -ErrorAction SilentlyContinue -pspath "MACHINE/WEBROOT/APPHOST" -Location "$($args[0])/User/$($args[1])" -Filter "system.webServer/webdav/authoringRules" -name "." 
      Write-Host -NoNewline " Removing All Users from Authoring Rules ..." 
      Write-Host -ForegroundColor Green " [ OK ]" 
     } 
     Catch { 
      Write-Host -NoNewline " Removing All Users from Authoring Rules ..." 
      Write-Host -ForegroundColor Red " [ ERROR ] " 
      Write-Output $($_.Exception.Message) 
     } 

     Try { 
      Add-WebConfigurationProperty -ErrorAction SilentlyContinue -pspath "MACHINE/WEBROOT/APPHOST" -Location "$($args[0])/User/$($args[1])" -Filter "system.webServer/webdav/authoringRules" -name "." -value @{users="$($args[2])";access='Read,Write,Source';path='*'} 
      Write-Host -NoNewline " Adding user $($args[2]) to Authoring Rules ..." 
      Write-Host -ForegroundColor Green " [ OK ]" 
     } 
     catch { 
      Write-Host -NoNewline " Adding user $($args[2]) to Authoring Rules ..." 
      Write-Host -ForegroundColor red " [ ERROR ] " 
      Write-Output $($_.Exception.Message) 
     } 
    } 
    Invoke-Command -Session $s -ScriptBlock $commandScriptBlock -ArgumentList $FBFolderName,$Username,$DomainUser 
    Remove-PSSession $s 
Verwandte Themen