Freigeben über


PowerShell-Cmdlets für Web Deployment

von Owais Shaikh

Web Deploy V3.0 wird mit PowerShell-Cmdlets ausgeliefert, um die meisten aufgaben auszuführen, die von der Web Deploy-API [Microsoft.Web.Deployment] unterstützt werden. Weitere Informationen zu dieser API finden Sie hier. Diese Cmdlets befinden sich im Snapin mit dem Namen WDeploySnapin3.0, das bei einer typischen oder höheren Installation von Webbereitstellungen als Snapin installiert und registriert wird. Um diese Cmdlets zu verwenden, fügen Sie das Snap-In jedes Mal hinzu, wenn die PowerShell-Konsole gestartet wird, oder fügen Sie das Snapin zum PowerShell-Profil hinzu, wodurch alle Konsolen automatisch das Snapin laden.

Um beim Laden der PowerShell-Konsole hinzuzufügen, führen Sie den folgenden Befehl im Konsolenfenster aus:

Add-PSSnapin WDeploySnapin3.0

So fügen Sie es dem PowerShell-Profil hinzu:

  1. Wenn Sie bereits über ein PowerShell-Profil verfügen, wechseln Sie zu Schritt 4.
  2. Erstellen Sie unter "Eigene Dokumente<" einen WindowsPowerShell-Ordner>.
  3. Erstellen einer Datei namens Microsoft.PowerShell_profile.ps1
  4. Fügen Sie diese Zeile zur PowerShell-Profildatei hinzu: 'Add-PSSnapin WDeploySnapin3.0'

Einige Punkte sind zu beachten:

  1. Die PowerShell-Konsole läuft in 64-Bit auf 64-Bit-Systemen und verwendet .Net 2.0, außer bis Windows 8. Wenn Sie auf eines oder beide dieser Probleme stoßen, lesen Sie den Abschnitt "Problembehandlung" für Lösungen.
  2. Alle Cmdlets, die ein Web Deploy-Paket erstellen, erstellen Parameter für die am häufigsten verwendeten Aufgaben und die Cmdlets, die sie verwenden, akzeptieren Parameterwerte.
  3. Es gibt nur ein Entfernungs-Cmdlet zum Löschen einer Website oder einer App darunter.
  4. Web Deploy verfügt über Parameter, sind aber orthogonal zu PowerShell-Cmdlet-Parametern. Wenn parameter in diesem Dokument referenziert werden, impliziert es Cmdlet-Parameter. Web Deploy-Parameter wurden spezifisch als Web Deploy-Parameter genannt.

Ich. Einstellungsdatei veröffentlichen

Alle unten angegebenen Cmdlets können gegen ein Remoteartefakt wie einen Remoteserver oder eine Remotedatenbank ausgeführt werden. Diese erfordern mehr als nur die Anmeldeinformationen. Zum Beispiel benötigen Sie den Namen des Remoteservers, die Verbindungszeichenfolge der Remotedatenbank und ob Sie die Veröffentlichung auf einem Server mit einem Testzertifikat zulassen möchten. Zur Verbesserung der Benutzerfreundlichkeit ist ein neuer Dateityp entstanden, der die Übertragung von Anmeldeinformationen vom Serveradministrator zum Benutzer erleichtert, indem diese Einstellungen zusammengefasst werden. Diese Datei wird als Veröffentlichungseinstellungsdatei bezeichnet, die auf ".publishsettings" endet. Dies wird von Visual Studio für die Veröffentlichung sowie von WebMatrix verwendet.

Um eine solche Datei für den Verbrauch durch andere Cmdlets zu erstellen und die Datei zu bearbeiten, kann das Cmdlet New-WDPublishSettings verwendet werden. Wenn kein Dateiname angegeben wird, wird eine neue Datei in Ihrem Dokumentverzeichnis mit dem Namen <"new guid.publishsettings>" erstellt. Dieser Pfad wird angezeigt, wenn die Datei erstellt wird. Wenn ein Dateiname angegeben ist und die Datei nicht vorhanden ist, wird sie wie oben im durch den Pfad angegebenen Ordner erstellt, der Pfad zu der Datei muss jedoch gültig sein. Falls die Datei existiert, werden nur die Werte der Attribute geändert, die Sie beim Ausführen des Befehls angegeben haben, mit Ausnahme der unbekannten Attribute in der Datei, die entfernt werden.

Beispiel: Dieses Beispiel ruft ein Anmeldeinformationsobjekt ab und übergibt es dann zusammen mit anderen Parametern an das Cmdlet für die Veröffentlichungseinstellungsdatei.

$cred = Get-Credential
New-WDPublishSettings -ComputerName owais-1 -Site Site1 -Credentials $cred -AllowUntrusted -SiteUrl "https://www.mywebsite.com" -FileName C:\pprofiles\mywebsite.publishsettings -AgentType wmsvc
Get-WDPublishSettings cmdlet allows to load values from a publish setting file into PublishSettings object.
$publishsettings=Get-WDPublishSettings C:\pprofiles\mywebsite.publishsettings

II. Sicherungskopie

Alle Sicherungs-Cmdlets verfügen über einen Positionsparameter namens Ausgabe (er ist der zweite, mit Ausnahme von Backup-wdserver, wo er der erste Positionsparameter ist). Dieser Schritt legt einen Pfad zu dem Ordner fest, in dem das Backup erstellt werden soll. Das Backup ist immer ein Web Deploy-Zip-Paket. Weitere Informationen zu Web Deploy-Paketen finden Sie beim Paketanbieter. Wenn kein Pfad angegeben ist, werden die Sicherungen in einem Ordner namens "Web Deploy Backups" unter dem Ordner "Dokumente des Benutzers" erstellt. Die Sicherungen werden als machinename_nameofproviderused_[Siteorapporfoldername(Optional)]_timestamp.zip benannt.

Alle diese Cmdlets funktionieren standardmäßig lokal, es sei denn, Remoteserverinformationen werden durch Übergeben einer Veröffentlichungseinstellungsdatei für den SourcePublishSettings-Parameter bereitgestellt.

A. IIS

Alle IIS-Cmdlets funktionieren mit installierter IIS-Version 7 oder höher.

1. Server

Backup-WDServer

Beschreibung: Dies ohne Argumente sichert den aktuellen Server, auf dem dieser Befehl ausgeführt wird. Er verwendet den bekannten Webserveranbieter für diesen Vorgang. Daher enthält das erstellte Paket alle Artefakte, die in einem Webserverpaket enthalten wären. Weitere Informationen zu diesem Anbieter finden Sie hier.

Cmdlet-Parameter: Mit dem Parameter ConfigOnly können Sie alle Inhalte ausschließen, während die Parameter SkipFileList und SkipFolderList es Ihnen ermöglichen, eine oder mehrere Dateien oder Ordner selektiv aus dem Paket auszuschließen.

Beispiele:

Dadurch werden sämtliche Daten des Webservers gesichert, mit Ausnahme des Inhalts.

Backup-WDServer -SourcePublishSettings c:\profiles\myserver.publishsettings -ConfigOnly

Erstellen Sie eine Liste der Dateien, die übersprungen werden sollen. Dies ist standardmäßige reguläre Ausdrücke.

$list = @('\\site2\\iisstart.htm','\\site2\\welcome.png')
Backup-WDServer –SkipFileList $list

Sie können dies auch ändern, um alle Dateien unter Website2 zu überspringen, indem Sie die Liste in $list=@('\site2\') ändern.

2. Website

Backup-WDSite

Beschreibung: Dadurch wird eine IIS-Website zusammen mit ihren Einstellungen und Inhalten mithilfe des Apphostconfig-Anbieters gesichert. Weitere Informationen zu diesem Anbieter finden Sie hier.

Cmdlet-Parameter: Der Name der Website, der vom Site-Parameter oder von der PublishSettings-Datei angegeben wird, wird gesichert. Der Websiteparameterwert überschreibt die Spezifikation der Veröffentlichungseinstellungen für den Websitenamen.

ConfigOnly kann verwendet werden, um eine Sicherung ohne Inhalt zu erstellen. Wenn die Website einen nicht standardmäßigen App-Pool verwendet, und Sie dieses Paket auf anderen Servern nutzen wollen, die möglicherweise nicht denselben Anwendungspool haben, dann verwenden Sie den Switch-Parameter includeAppPool. Dadurch wird der Anwendungspool in das Paket gebündelt.

Automatisch generierte Web Deploy-Parameter: Es werden zwei Parametertypen erstellt:

  1. Ein Parameter, mit dem der Benutzer den Namen der Website ändern kann, auf die die Websitesicherung angewendet wird.
  2. Ein weiterer Parameter, mit dem der Benutzer den physischen Pfad der Website und jede Webanwendung unter dieser Website ändern kann.

Wenn ich also eine Website mit drei Apps darunter habe, erhalte ich 4 separate physische Pfadparameter und einen Website-Namen-Parameter.

Beispiele:

Backup-WDSite "Default Web Site" -ConfigOnly
Backup-WDSite MySite –IncludeAppPool
Backup-WDSite MySite -SkipFileList $list

3. Webanwendung

Backup-WDApp

Beschreibung: Dadurch wird eine Webanwendung mithilfe des iisApp-Anbieters gesichert. Weitere Informationen zu diesem Anbieter finden Sie hier. Hier ist ein guter Artikel , in dem erläutert wird, was eine Webanwendung ist und was der Unterschied zwischen einer Website, einer App und einem virtuellen Verzeichnis in IIS ist.

Cmdlet-Parameter: Der Name der App, die durch den Anwendungsparameter oder durch die Publish-Einstellungsdatei angegeben wird, wird gesichert. Wenn keiner von ihnen angegeben ist, wird ein Fehler ausgelöst. Der Wert des Anwendungsparameters setzt die Spezifikation der Veröffentlichungseinstellungen für den Websitenamen außer Kraft. Mit den Parametern SkipFileList und SkipFolderList können Sie eine oder mehrere Dateien oder Ordner selektiv aus dem Paket ausschließen.

Automatisch generierte Web Deploy-Parameter: Ein Parameter zum Ändern des Namens der App oder Website während der Wiederherstellung oder Installation wird erstellt.

$list = @('\\iisstart\.htm')
Backup-WDApp "Default web site/app" -SkipFileList $list

B. Datenbank

1. MSSql

Backup-WDSqlDatabase

Beschreibung: Dadurch wird eine Microsoft SQL Server-Datenbank mithilfe des dbfullsql-Anbieters gesichert. Dieser Anbieter verwendet SMO zum Skripten der Datenbank und macht mehr als 100 Anbietereinstellungen verfügbar, um die Art und Weise zu steuern, wie die Datenbank skriptiert wird. Dies wird hier ausführlich behandelt.

Cmdlet-Parameter: Die Verbindungszeichenfolge, die durch den Datenbankparameter oder SQLServerDBConnectionString in der Veröffentlichungseinstellungsdatei angegeben ist, wird gesichert. Der Datenbankparameterwert setzt die Spezifikation der Veröffentlichungseinstellungen für SQLServerDBConnectionString außer Kraft. Die von diesem dbfullsql-Anbieter verfügbar gemachten Anbietereinstellungen können mithilfe des SourceSettings-Parameters übergeben werden. Eine sehr häufig verwendete Einstellung ist scriptdropsfirst, die Skripte generiert, um Objekte zu löschen, falls sie vorhanden sind, bevor neue Skripte erstellt werden. Eine weitere Anbietereinstellung aus den SMO-Skriptoptionen besteht darin, die Skriptdaten-Option auf "false" zu setzen, um ausschließlich das Schema zu extrahieren.

Automatisch generierte Web Deploy-Parameter: Ein Parameter wird erstellt, um die Datenbankverbindungszeichenfolge während der Wiederherstellung oder Installation zu ändern.

Beispiele:

New-WDPublishSettings -ComputerName serverName -MSSqlConnectionString "Data Source=localhost;Initial Catalog=MyDb;User id=MyDbUser;Password=MyPassword" -FileName d:\SQLdb.PublishSettings -Credential serverName\Administrator
Backup-WDSQLDatabase -SourcePublishSettings D:\SQLdb.PublishSettings
Backup-WDSQLDatabase -Database "Data Source=localhost;Initial Catalog=MyDb;User id=MyDBUser;Password=MyPassword" -SourceSettings @{ copyAllUsers='false'; scriptDropsFirst='true'; }

2. MySql

Backup-WDMySQLDatabase

Beschreibung: Dadurch wird eine MySql Server-Datenbank mithilfe des dbmysql-Anbieters gesichert. Dieser Anbieter verwendet mysqldump, um die Datenbank zu skripten. Dies wird hier ausführlich behandelt.

Cmdlet-Parameter: Die durch den Datenbankparameter oder mySQLDBConnectionString in der Veröffentlichungseinstellungsdatei angegebene Verbindungszeichenfolge wird gesichert. Der Wert des Datenbankparameters überschreibt die in den Veröffentlichungseinstellungen angegebene Spezifikation für die mySQLDBConnectionString. Die Anbietereinstellungen können mithilfe des SourceSettings-Parameters übergeben werden. Die häufig verwendeten Einstellungen sind includeData und includeSchema. Standardmäßig sind diese auf "true" festgelegt.

Automatisch generierte Web Deploy-Parameter: Ein Parameter wird erstellt, um die Datenbankverbindungszeichenfolge während der Wiederherstellung oder Installation zu ändern.

New-WDPublishSettings -ComputerName serverName -MySqlConnectionString "Data Source=localhost;database=MyDb;Uid=MyDbUser;pwd=MyPassword" -FileName d:\MySQLdb.PublishSettings -Credential serverName\Administrator
Backup-WDMySQLDatabase -Database 'Server=localhost;Database=MyDb;Uid=MyDbUser;pwd=MyPassword’
Backup-WDMySqlDatabase –SourcePublishSettings d:\mysqldb.publishsettings

III. Wiederherstellen

Alle Wiederherstellungs-Cmdlets nehmen das Web Deploy-Paket als ersten Positionsparameter, um die Wiederherstellung durchzuführen.

WebDeploy unterstützt das Konzept der Parametrisierung der Pakete, mit dem Sie während der Wiederherstellung (ohne Paketänderung) einige Aspekte ändern können. Sie können z. B. während der Wiederherstellung den Wert der Datenbankverbindungszeichenfolge angeben, die sich von dem innerhalb des Pakets unterscheidet, indem Sie WebDeploy-Parameter verwenden (Sie müssen einen Verbindungszeichenfolgenparameter im Paket aufweisen.)

Je nachdem, wie das Paket erstellt wurde, verfügt das Web Deploy-Paket möglicherweise über einen oder mehrere . Diese Wiederherstellungs-Cmdlets überprüfen das Paket und fügen der Sammlung dynamische PowerShell-Parameter hinzu. Wenn ein Paket also über einen Web Deploy-Parameter namens "Parameter1" verfügt, finden Sie einen PowerShell-Parameter mit dem Namen "Parameter1". Dynamische Parameter haben jedoch eigene Probleme in PowerShell, und dies funktioniert nur, wenn Pakete kein Leerzeichen in ihrem Namen oder im Pfad zur Datei haben.

Alternativ verfügen all diese Wiederherstellungs-Cmdlets auch über einen Parameter "Parameters", mit dem Sie während der Wiederherstellung manuell neue Parameterwerte angeben können. Dieser Parameter "Parameters" verwendet das PowerShell-Wörterbuchobjekt für die Namenswertpaare von Web Deploy-Parametern.

Um die in jedem Web Deploy-Paket definierten Web Deploy-Parameter zu ermitteln, können Sie die ZIP-Datei einfach in Windows Explorer öffnen und die parameters.xml Datei untersuchen, die im Stammverzeichnis des Pakets vorhanden ist. Jeder Web Deploy-Parameter, der keinen Standardwert aufweist, oder ein Wert benötigt einen Wert, der angegeben werden soll. Fügen Sie alle diese Parameter in einer XML-Datei hinzu, und übergeben Sie sie als Wert für parameterValuesFile.Add all of these parameters in an xml file and pass it in as the value for ParameterValuesFile parameter. Sie können diese Datei wie hier angegeben oder manuell generieren. Das Format ist

<parameters>
  <setParameter name="name1" value="value1" />
  <setParameter name="name2" value="value2" />
</parameters>

Get-WDParameters Cmdlet kann diese Datei lesen und in das WebDeploy-Parameterobjekt (Wörterbuch) konvertieren, das von allen Wiederherstellungs-Cmdlets akzeptiert wird.

Wenn ein Paket wiederhergestellt wird, ohne einen Wert für die Parameter anzugeben, würde das Standardverhalten die Ressourcen überschreiben, aus denen das Paket ursprünglich erstellt wurde. Wenn ich zum Beispiel ein Paket von site1 mit dem Befehl „Backup-wdsite site1“ erstelle und dann dieses Paket mit dem Wiederherstellungs-Cmdlet wiederherstelle, ohne Werte für die Parameter in diesem Paket anzugeben, wird site1 mit dem Inhalt und der Konfiguration des Pakets überschrieben. Dasselbe gilt für alle anderen Wiederherstellungs-Cmdlets.

Alle diese Cmdlets werden lokal wiederhergestellt, es sei denn, es ist eine Zielveröffentlichungseinstellungsdatei angegeben. In diesem Fall würde ein genau identischer Vorgang auf einem Remoteserver über den Webverwaltungsdienst (Web Management Service, WMSvc) oder den Webbereitstellungs-Agent-Dienst erfolgen.

A. IIS

1. Server

Restore-WDServer

Beschreibung: Stellt ein Webserverpaket wieder her. Die allgemeine Verwendung besteht darin, einen Server zu sichern, bevor eine Änderung vorgenommen wird, und im Falle eines Fehlers kann der Server wiederhergestellt werden, indem das erstellte Web Deploy-Sicherungspaket angewendet wird, bevor die Änderungen vorgenommen werden.

$folderList = @(‘\\app_data’)
Restore-WDServer D:\OWAIS-1_WebServer_20120419121214.zip -DestinationPublishSettings c:\destinationServer.publishSettings –SkipFolderList $folderList

2. Website

Restore-WDSite

Beschreibung: Stellt ein IIS-Websitepaket wieder her. Wenn das Paket zwei Parameter mit dem Namen "Site Physical Path" und "Site Name" aufweist, werden sie als dynamischer PowerShell-Parameter "SitePhysicalPath" und "SiteName" verfügbar gemacht. Mit diesem Befehl wird eine neue Website site1 mit physischem Pfad c:\site1 erstellt. Wenn für diese Parameter kein Wert angegeben ist, gilt die Wiederherstellung für dieselbe Website und denselben Inhalt, wobei alle Änderungen überschrieben werden, die Sie möglicherweise auf der Website haben.

Parameter: Möglicherweise möchten Sie skipfolderlist und skipfilelist verwenden, um einige Ordner und/oder Dateien davon auszuschließen, dass sie in Websiteinhalte kopiert werden.

Restore-WDSite C:\defaultsite.zip -SitePhysicalPath c:\site1 -SiteName site1
Restore-WDSite -Package 'D:\Users\Administrator\Documents\Web Deploy Backups\IIS-Server_AppHostConfig_Default Web Site_20120417100827.zip' -skipFolderList @('App_Data')  -verbose

3. App

Restore-WDApp

Beschreibung: Dadurch wird eine Webanwendung wiederhergestellt. Backup-WDApp erstellt ein Paket mit einem Parameter, um den Namen der App während der Installation zu ändern. Dies kann verwendet werden, um die App während der Wiederherstellung auf eine andere Version wiederherzustellen. Die Website muss vorhanden sein, wenn sie in einer App unter einer Website bereitgestellt wird. Die App wird von diesem Paket erstellt, die Website wird jedoch nicht erstellt.

Beispiele:

Restore-WDApp C:\myappbackup.zip -ApplicationPathParam1 "Default web site\app1"

B. Datenbank

Restore-WDDatabase

Beschreibung: Wenn die Datenbank nicht vorhanden ist, erstellt dies eine neue Datenbank namens "Kunden" (sofern der aktuelle Benutzer über Berechtigungen für diesen Vorgang verfügt) und führt das Skript darauf aus. Wenn dies ohne Werte für dynamische Web Deploy-Parameter ausgeführt wird, wird die ursprüngliche Datenbank, aus der dieses Paket erstellt wurde, überschrieben. Beachten Sie, dass beim Erstellen des Pakets, wenn die SkriptDropsFirst-Einstellung nicht verwendet wurde, das Anwenden auf eine Datenbank mit konfliktierenden vorhandenen Inhalten fehlschlägt. Dieses Cmdlet kann zum Wiederherstellen einer MSSql- oder MySQL-Sicherung verwendet werden. Sie können eine MS SQL-Datenbank nur mit einer Sicherung wiederherstellen, die mit Backup-WDSQLDatabase und meiner SQL-Datenbank mit einer Sicherung erstellt wurde, die mit Backup-WDMySqlDatabase erstellt wurde.

Beispiele:

Backup-WDSqlDatabase "server=.\sqlexpress;integrated security=SSPI;database=customers" "C:\dbbackup.zip"
Restore-WDDatabase c:\dbbackup.zip –DatabaseConnectionStringParam1 "server=.\sqlexpress;integrated security=SSPI;database=customers_copy"
Backup-WDMySqlDatabase "server=localhost;uid=someuser;pwd=somepwd;database=coolDb" "C:\dbbackup.zip"
Restore-WDDatabase c:\dbbackup.zip –DatabaseConnectionStringParam1 "server=localhost;uid=someuser;pwd=somepwd;database=coolDb_copy"

C. Generisches Paket

Restore-WDPackage

Beschreibung: Dieses Cmdlet kann verwendet werden, um ein beliebiges Web Deploy-Paket anzuwenden. Es gibt mehrere Möglichkeiten zum Erstellen oder Abrufen eines Web Deploy-Pakets, z. B. durch Herunterladen eines Open Source Application Gallery-Pakets, Erstellen eines Pakets in Visual Studio, Verwenden des msdeploy.exe Befehlszeilentools (weitere Informationen) oder Verwenden der zuvor im Dokument erwähnten Backup-WD*-Cmdlets. Zum Installieren von Wordpress auf einer IIS Server Default-Website als App mit dem Namen Wordpress laden Sie das Wordpress-Paket aus dem App-Katalog in einen Ordner namens "Pakete" herunter. Alle Standardwerte für die Wordpress-Paketparameter funktionieren wie dies ist, müssen aber nur die Werte für zwei erforderliche Parameter angeben: Administrator- und Nicht-Administrator-Mysql-Kennwort.

Parameter:

Restore-WDPackage c:\Packages\wordpress.zip -DBAdminPassword mysecretserverpassword –DBPassword mysqllocalpassword

IV. Entfernen

Remove-WDSite -Site NonWorkingSite

Dieser Befehl löscht die Definition der Website namens "nichtworkingsite" in applicationHost.config sowie den Verzeichnisinhalt der Website.

V. Abrufen und Festlegen des App Pool Frameworks

Mit diesen Cmdlets können Sie die .net Framework-Version von apppool lesen und ändern.

Get-WDAppPoolFx "default web site"
managedRuntimeVersion
---------------------
v2.0
Set-WDAppPoolFx "default web site" -AppPoolFrameworkVersion v4.0
Get-WDAppPoolFx "default web site"
managedRuntimeVersion
---------------------
v4.0

VI. WDACL festlegen

Dieses Cmdlet kann zum Festlegen von Acls für den Inhalt einer Website verwendet werden. Angenommen, ich habe eine Website, site1 und ich versuche, Dem Benutzer u1 Lesezugriff zu gewähren.

Zuerst prüfe ich die aktuellen Berechtigungen.

$ret = Get-Acl C:\site1
$ret.Access
I don’t see u1 in the list. Let me give the user u1 access as follows
Set-WDAcl "site1" -SetAclUser u1
Check whether this worked
$ret = Get-Acl C:\site1
$ret.Access
I see that u1 has been given read access as below. [I have not pasted the other permissions on this folder. Just the u1 part]
FileSystemRights  : Read, Synchronize
AccessControlType : Allow
IdentityReference : MOSHAIKH1\u1
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

VII. Invoke

Sie können Befehle oder Skripts auf einem Remotesystem mithilfe von Destinationpublishsettings aufrufen und die Ergebnisse der Remoteausführung in Echtzeit anzeigen. Sie müssen ein Administrator auf dem Remotesystem sein, um den Runcommand-Anbieter remote ausführen zu können. Weitere Informationen zu diesem Anbieter finden Sie hier. Die standardmäßige maximale Zeit, bis die MWD-API auf das angegebene Skript oder den angegebenen Befehl wartet, beträgt 5 Sekunden. Wenn Sie diese Ausführungszeit erhöhen möchten, können Sie höhere Werte für waitInterval und waitAttempts angeben, wie im folgenden Beispiel gezeigt.

A. Skript

Invoke-WDScript C:\my.cmd –Verbose

Dadurch wird das Skript ausgeführt, und Sie können die Ausgabe des Befehls sehen, wenn Sie es im ausführlichen Modus ausführen.

B. Befehl

$settings = @ { waitInterval = 3000; waitAttempts = 25;}
Invoke-WDCommand "dir c:\mydirectory /s/b" -DestinationSettings $settings

Dadurch wird der Befehl ausgeführt, und keine Ausgabe erfolgt, da der verbose-Modus nicht angegeben wurde. Jedoch wird nach jedem Zeitintervall eine Wartezeit von 3 Sekunden eingelegt und dies wird in 25 Iterationen wiederholt. Insgesamt wird die Prozessausführung höchstens 75 Sekunden lang fortgesetzt.

VIII. Synchronisieren

Diese Cmdlets nehmen eine Quelle und ein Ziel und synchronisieren diese miteinander. Die Quelle wird nie geändert. Der Grund, warum ich die Wortquelle anstelle des Clients verwende, ist, dass Client und Server bei der Synchronisierung sehr verwirrend sind. Sie können den lokalen Server potenziell mit einem Remoteserver synchronisieren. In diesem Fall ist der Remoteserver die Quelle und der lokale Server das Ziel. Alternativ können Sie das PowerShell-Cmdlet auf Computer 1 ausführen und Computer 2 und 3 synchronisieren. Um eine Remotequelle und/oder ein Ziel zu verwenden, müssen Sie eine Veröffentlichungseinstellungsdatei bereitstellen, die mit dem ersten in diesem Dokument erwähnten Cmdlet erstellt werden kann. Alle Synchronisierungs-Cmdlets unterstützen auch sourceSettings- und destinationSettings-Parameter, um anbietereinstellungen für die Quelle oder das Ziel oder beides selektiv festzulegen.

A. IIS

1. Server

Ich möchte zwei IIS 7.5-Server, Owais-1 und Owais-2 synchronisieren. Zuerst erstelle ich eine Publishsettings-Datei für jeden und synchronisiert dann die Server. Da ich meine Anmeldeinformationen nicht angegeben habe, wird dies erfolgreich sein, wenn ich ein Administrator auf diesen beiden Systemen bin.

New-WDPublishSettings -ComputerName owais-1 -AgentType MSDepSvc -FileName c:\owais1.publishsettings
Publish settings file created at: 'c:\owais1.publishsettings'.
New-WDPublishSettings -ComputerName owais-2 -AgentType MSDepSvc -FileName c:\owais2.publishsettings
Publish settings file created at: 'c:\owais2.publishsettings'.
Sync-WDServer -SourcePublishSettings c:\owais1.publishSettings -DestinationPublishSettings c:\owais2.publishSettings

2. Website

Im folgenden Befehl wird die Website2 erstellt, wenn sie nicht vorhanden ist, und ich habe auch den physischen Pfad geändert (der Inhalt wird daher in den neuen Ordner c:\site2kopiert) und die Bindung der Website.

Sync-WDSite site1 Site2 -SitePhysicalPath c:\site2 -SiteBinding "*:8078:" -IncludeAppPool

3. App

Ich habe eine Anwendung, die unter der Standardwebsite ausgeführt wird. Ich möchte dies unter "Site1" verschieben. Der folgende Befehl führt dies aus.

Sync-WDApp "Default Web Site/drupal" "site1/drupal"

Nachdem ich nun getestet habe, dass meine neue Drupal-App funktioniert, werde ich die ursprüngliche Drupal-App unter der Standardwebsite löschen.

Remove-WDSite "Default Web Site/drupal"

B. Datenbank

Die vorherigen Cmdlets haben gezeigt, wie Sie eine Datenbank mithilfe eines Web Deploy-Pakets sichern und wiederherstellen können. Sie können jedoch auch eine Datenbank mit oder aus einem .sql Skript synchronisieren oder direkt mit einer anderen Datenbankinstanz mithilfe der Sync-WDSQLDatabase und Sync-WDMySQLDatabase Cmdlets synchronisieren.

1. MSSql

Sync-WDSQLDatabase "server=.\sqlexpress;uid=sa;pwd=********;database=umbracodb" "server=.\sqlexpress;uid=sa;pwd=************;database=sometestdb"

Dadurch wird eine neue Datenbank namens sometestdb (sofern sie noch nicht vorhanden ist) erstellt und Schema und Daten synchronisiert.

Sync-"server=.\sqlexpress;uid=sa;pwd=********;database=umbracodb"  c:\umbraco.sql

Dies wird die UmbracoDB-Datenbank in umbraco.sql in dem oben angegebenen Pfad skriptiert.

2. MySql

Sync-WDMySQLDatabase "server=localhost;uid=root;pwd=********;database=wordpress265" "server=localhost;uid=root;pwd=************;database=wordpress265_new"

Dadurch wird eine neue Datenbank namens wordpress265_new (sofern sie noch nicht vorhanden ist) erstellt und Schema und Daten synchronisiert.

Sync-WDMySQLDatabase "server=localhost;uid=root;pwd=***************;database=wordpress265" c:\wordpress.sql

Dadurch wird die WordPress265-Datenbank im oben angegebenen Pfad in wordpress.sql exportiert.

C. Alles andere

Für die allgemeine Synchronisierung, die von anderen oben angegebenen Cmdlets nicht abgedeckt wird, können Sie Sync-WDManifest Cmdlet verwenden. Dies ist eine allgemeine Manifestanbietersynchronisierung, die von der MWD-API unterstützt wird. Weitere Informationen dazu finden Sie hier. Manifest ist eine Sammlung von Anbietern, Anbieterpfaden und Anbietereinstellungen in einer XML-Datei. Die Struktur besteht darin, dass der Stammknoten der XML-Datei als Name eines Anbieters für den Zweck der aktuellen Synchronisierung betrachtet wird. Daher kann es nicht der Name eines der bekannten Anbieter sein, wie in der Liste hier angegeben. Anschließend kann es untergeordnete Knoten mit dem Elementnamen haben, der dem Anbieter entspricht, den Sie in die Synchronisierung aufnehmen möchten. Ein Pfad-Attribut stellt den Pfad dieses Anbieters dar und ist obligatorisch. Fügen Sie dann Attributwertpaare für jede Anbietereinstellung hinzu, die Sie für den aktuellen Synchronisierungsvorgang nutzen möchten.

Dieses Cmdlet benötigt zwei Manifeste: eine für die Quelle und eine für das Ziel. Das Manifest wird immer in der angegebenen Reihenfolge ausgeführt. Wenn der Anbieter einen Commit-Vorgang wie den Apphostconfig-Anbieter unterstützt, der mit IIS-Websites funktioniert, wird der Commit erst aufgerufen, wenn die Synchronisierung abgeschlossen ist. Wenn Sie also einen Anbieter haben, der erwartet, dass eine Website nach einem Anbieter vorhanden ist, der sie erstellt, schlägt dies fehl, da die Website noch nicht zugesichert wurde. Im folgenden Beispiel synchronisiert ich eine App und schließe eine Datenbank ein, die die App zusammen mit der App im Manifest verwendet.

Quellcode-Manifest

<demoManifest>
  <iisApp path="Site1" />
  <dbfullsql path="server=.\sqlexpress;integrated security=SSPI;database=customers" />
</demoManifest>

Zielmanifest:

<demoManifest>  <iisApp path="Site2" />  <dbfullsql path="server=.\sqlexpress;integrated security=SSPI;database=customers_demo_cpy" /></demoManifest>Sync-WDManifest C:\sourceManifest.xml C:\destManifest.xmlWARNING: Cannot connect to the database 'customers_demo_cpy'.Retrying operation 'Add' on object dbFullSql (server=.\sqlexpress;uid=sa;database=customers_demo_cpy). Attempt 1 of 5.Manifest         : C:\sourceManifest.xmlManifest-Dest    : C:\destManifest.xmlTimeTaken        : 0:10Errors           : 0Warnings         : 0BytesCopied      : 0ObjectsDeleted   : 0ObjectsUpdated   : 0ObjectsAdded     : 3TotalChanges     : 3ParameterChanges : 0