public void RemoveAzureSqlDatabaseWithSqlAuth() { using (System.Management.Automation.PowerShell powershell = System.Management.Automation.PowerShell.Create()) { // Create a context NewAzureSqlDatabaseServerContextTests.CreateServerContextSqlAuth( powershell, "$context"); // Create 2 test databases NewAzureSqlDatabaseTests.CreateTestDatabasesWithSqlAuth( powershell, "$context"); HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTests.RemoveAzureSqlDatabaseWithSqlAuth"); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); if (expected.Index < 8) { // Request 0-5: Remove database requests // Request 6-7: Get all database request DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); } else { Assert.Fail("No more requests expected."); } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { // Create context with both ManageUrl and ServerName overriden Collection <PSObject> databases; using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { powershell.InvokeBatchScript( @"Remove-AzureSqlDatabase " + @"-Context $context " + @"-DatabaseName testdb1 " + @"-Force"); powershell.InvokeBatchScript( @"Remove-AzureSqlDatabase " + @"-Context $context " + @"-DatabaseName testdb2 " + @"-Force"); databases = powershell.InvokeBatchScript( @"Get-AzureSqlDatabase " + @"-Context $context"); } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); Assert.AreEqual(1, databases.Count, "Expecting only master database object"); } } }
/// <summary> /// Common helper method for other tests to create a context. /// </summary> /// <param name="contextVariable">The variable name that will hold the new context.</param> public static void CreateServerContextSqlAuth( System.Management.Automation.PowerShell powershell, string contextVariable) { HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTest.Common.NewAzureSqlDatabaseServerContextWithSqlAuth"); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-2: Create context with both ManageUrl and ServerName overriden case 0: // GetAccessToken call DatabaseTestHelper.ValidateGetAccessTokenRequest( expected.RequestInfo, actual); break; case 1: // Get server call DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; case 2: // $metadata call Assert.IsTrue( actual.RequestUri.AbsoluteUri.EndsWith("$metadata"), "Incorrect Uri specified for $metadata"); DatabaseTestHelper.ValidateHeadersForServiceRequest( expected.RequestInfo, actual); Assert.AreEqual( expected.RequestInfo.Headers[DataServiceConstants.AccessTokenHeader], actual.Headers[DataServiceConstants.AccessTokenHeader], "AccessToken header does not match"); Assert.AreEqual( expected.RequestInfo.Cookies[DataServiceConstants.AccessCookie], actual.Cookies[DataServiceConstants.AccessCookie], "AccessCookie does not match"); break; default: Assert.Fail("No more requests expected."); break; } }); UnitTestHelper.ImportSqlDatabaseModule(powershell); UnitTestHelper.CreateTestCredential( powershell, testSession.SessionProperties["Username"], testSession.SessionProperties["Password"]); Collection <PSObject> serverContext; using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { serverContext = powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"{1} = New-AzureSqlDatabaseServerContext " + @"-ServerName {2} " + @"-ManageUrl {0} " + @"-Credential $credential", MockHttpServer.DefaultServerPrefixUri.AbsoluteUri, contextVariable, testSession.SessionProperties["Servername"]), contextVariable); } } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); PSObject contextPsObject = serverContext.Single(); Assert.IsTrue( contextPsObject.BaseObject is ServerDataServiceSqlAuth, "Expecting a ServerDataServiceSqlAuth object"); }
public void CleanupTest() { DatabaseTestHelper.SaveDefaultSessionCollection(); }
public void GetAzureSqlDatabaseWithSqlAuthNonExistentDb() { using (System.Management.Automation.PowerShell powershell = System.Management.Automation.PowerShell.Create()) { // Create a context NewAzureSqlDatabaseServerContextTests.CreateServerContextSqlAuth( powershell, "$context"); // Query a non-existent test database HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTests.GetAzureSqlDatabaseWithSqlAuthNonExistentDb"); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-2: Get database requests case 0: DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; default: Assert.Fail("No more requests expected."); break; } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { powershell.InvokeBatchScript( @"Get-AzureSqlDatabase " + @"-Context $context " + @"-DatabaseName testdb3"); } } Assert.AreEqual(1, powershell.Streams.Error.Count, "Expecting errors"); Assert.AreEqual(2, powershell.Streams.Warning.Count, "Expecting tracing IDs"); Assert.AreEqual( "Database 'testserver.testdb3' not found.", powershell.Streams.Error.First().Exception.Message, "Unexpected error message"); Assert.IsTrue( powershell.Streams.Warning.Any(w => w.Message.StartsWith("Client Session Id")), "Expecting Client Session Id"); Assert.IsTrue( powershell.Streams.Warning.Any(w => w.Message.StartsWith("Client Request Id")), "Expecting Client Request Id"); powershell.Streams.ClearStreams(); } }
public void GetAzureSqlDatabaseWithSqlAuth() { using (System.Management.Automation.PowerShell powershell = System.Management.Automation.PowerShell.Create()) { // Create a context NewAzureSqlDatabaseServerContextTests.CreateServerContextSqlAuth( powershell, "$context"); // Query the created test databases HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTests.GetAzureSqlDatabaseWithSqlAuth"); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-3: Get all databases + ServiceObjective lookup for each database case 0: case 1: case 2: case 3: // Request 4-7: Get database requests, 2 requests per get case 4: case 5: case 6: case 7: DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; default: Assert.Fail("No more requests expected."); break; } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { Collection <PSObject> databases, database1, database2; using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { databases = powershell.InvokeBatchScript( @"Get-AzureSqlDatabase " + @"-Context $context"); database1 = powershell.InvokeBatchScript( @"Get-AzureSqlDatabase " + @"-Context $context " + @"-DatabaseName testdb1"); database2 = powershell.InvokeBatchScript( @"Get-AzureSqlDatabase " + @"-Context $context " + @"-DatabaseName testdb2"); } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); // Expecting master, testdb1, testdb2 Assert.AreEqual( 3, databases.Count, "Expecting three Database objects"); Assert.IsTrue( database1.Single().BaseObject is Services.Server.Database, "Expecting a Database object"); Services.Server.Database database1Obj = (Services.Server.Database)database1.Single().BaseObject; Assert.AreEqual( "testdb1", database1Obj.Name, "Expected db name to be testdb1"); Assert.IsTrue( database2.Single().BaseObject is Services.Server.Database, "Expecting a Database object"); Services.Server.Database database2Obj = (Services.Server.Database)database2.Single().BaseObject; Assert.AreEqual( "testdb2", database2Obj.Name, "Expected db name to be testdb2"); Assert.AreEqual( "Japanese_CI_AS", database2Obj.CollationName, "Expected collation to be Japanese_CI_AS"); Assert.AreEqual("Web", database2Obj.Edition, "Expected edition to be Web"); Assert.AreEqual(5, database2Obj.MaxSizeGB, "Expected max size to be 5 GB"); } } }
public void NewAzureSqlDatabaseWithSqlAuthDuplicateName() { using (System.Management.Automation.PowerShell powershell = System.Management.Automation.PowerShell.Create()) { // Create a context NewAzureSqlDatabaseServerContextTests.CreateServerContextSqlAuth( powershell, "$context"); // Create 2 test databases NewAzureSqlDatabaseTests.CreateTestDatabasesWithSqlAuth( powershell, "$context"); // Issue another create testdb1, causing a failure HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTest.NewAzureSqlDatabaseWithSqlAuthDuplicateName"); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-1: Create testdb1 case 0: case 1: DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; default: Assert.Fail("No more requests expected."); break; } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { Services.Server.ServerDataServiceSqlAuth context; using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { Collection <PSObject> ctxPsObject = powershell.InvokeBatchScript("$context"); context = (Services.Server.ServerDataServiceSqlAuth)ctxPsObject.First().BaseObject; powershell.InvokeBatchScript( @"New-AzureSqlDatabase " + @"-Context $context " + @"-DatabaseName testdb1 " + @"-Force"); } } Assert.AreEqual(1, powershell.Streams.Error.Count, "Expecting errors"); Assert.AreEqual(2, powershell.Streams.Warning.Count, "Expecting tracing IDs"); Assert.AreEqual( "Database 'testdb1' already exists. Choose a different database name.", powershell.Streams.Error.First().Exception.Message, "Unexpected error message"); Assert.IsTrue( powershell.Streams.Warning.Any(w => w.Message.StartsWith("Client Session Id")), "Expecting Client Session Id"); Assert.IsTrue( powershell.Streams.Warning.Any(w => w.Message.StartsWith("Client Request Id")), "Expecting Client Request Id"); powershell.Streams.ClearStreams(); } }
/// <summary> /// Create $testdb1 and $testdb2 on the given context. /// </summary> /// <param name="powershell">The powershell instance containing the context.</param> /// <param name="contextVariable">The variable name that holds the server context.</param> public static void CreateTestDatabasesWithSqlAuth( System.Management.Automation.PowerShell powershell, string contextVariable) { HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTest.Common.CreateTestDatabasesWithSqlAuth"); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-1: Create testdb1 // Request 2-3: Create testdb2 case 0: case 1: case 2: case 3: DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; default: Assert.Fail("No more requests expected."); break; } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { Collection <PSObject> database1, database2; using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { database1 = powershell.InvokeBatchScript( @"$testdb1 = New-AzureSqlDatabase " + @"-Context $context " + @"-DatabaseName testdb1 " + @"-Force", @"$testdb1"); database2 = powershell.InvokeBatchScript( @"$testdb2 = New-AzureSqlDatabase " + @"-Context $context " + @"-DatabaseName testdb2 " + @"-Collation Japanese_CI_AS " + @"-Edition Web " + @"-MaxSizeGB 5 " + @"-Force", @"$testdb2"); } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); Assert.IsTrue( database1.Single().BaseObject is Services.Server.Database, "Expecting a Database object"); Services.Server.Database database1Obj = (Services.Server.Database)database1.Single().BaseObject; Assert.AreEqual("testdb1", database1Obj.Name, "Expected db name to be testdb1"); Assert.IsTrue( database2.Single().BaseObject is Services.Server.Database, "Expecting a Database object"); Services.Server.Database database2Obj = (Services.Server.Database)database2.Single().BaseObject; Assert.AreEqual("testdb2", database2Obj.Name, "Expected db name to be testdb2"); Assert.AreEqual( "Japanese_CI_AS", database2Obj.CollationName, "Expected collation to be Japanese_CI_AS"); Assert.AreEqual("Web", database2Obj.Edition, "Expected edition to be Web"); Assert.AreEqual(5, database2Obj.MaxSizeGB, "Expected max size to be 5 GB"); } }
public void GetAzureSqlDatabaseContinuousCopyWithSqlAuth() { using (System.Management.Automation.PowerShell powershell = System.Management.Automation.PowerShell.Create()) { // Create a context NewAzureSqlDatabaseServerContextTests.CreateServerContextSqlAuth( powershell, "$context"); // Create 2 test databases NewAzureSqlDatabaseTests.CreateTestDatabasesWithSqlAuth( powershell, "$context"); // Start two continuous database copy operation StartAzureSqlDatabaseCopyTests.StartDatabaseContinuousCopyWithSqlAuth( powershell, "$context", "$copy1", "testdb1"); StartAzureSqlDatabaseCopyTests.StartDatabaseContinuousCopyWithSqlAuth( powershell, "$context", "$copy2", "testdb2"); HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTest.GetAzureSqlDatabaseContinuousCopyWithSqlAuth"); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-1: Get all database copies request case 0: case 1: // Request 2-3: Get database copies for testdb1 case 2: case 3: // Request 4-5: Get database copies for testdb2 case 4: case 5: DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; default: Assert.Fail("No more requests expected."); break; } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { Collection <PSObject> databaseCopies, databaseCopy1, databaseCopy2; using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { databaseCopies = powershell.InvokeBatchScript( @"Get-AzureSqlDatabaseCopy " + @"-Context $context"); databaseCopy1 = powershell.InvokeBatchScript( @"Get-AzureSqlDatabaseCopy " + @"-Context $context " + @"-DatabaseName testdb1"); databaseCopy2 = powershell.InvokeBatchScript( @"Get-AzureSqlDatabaseCopy " + @"-Context $context " + @"-DatabaseName testdb2"); } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); Assert.AreEqual(2, databaseCopies.Count, "Expecting 2 Database Copy objects"); Assert.IsTrue( databaseCopy1.First().BaseObject is Services.Server.DatabaseCopy, "Expecting a Database Copy object"); Services.Server.DatabaseCopy databaseCopyObj = (Services.Server.DatabaseCopy)databaseCopy1.Single().BaseObject; Assert.AreEqual( "testserver", databaseCopyObj.SourceServerName, "Expected source server name to be testserver"); Assert.AreEqual( "testdb1", databaseCopyObj.SourceDatabaseName, "Expected source database name to be testdb1"); Assert.AreEqual( "partnersrv", databaseCopyObj.DestinationServerName, "Expected destination server name to be partnersrv"); Assert.AreEqual( "testdb1", databaseCopyObj.DestinationDatabaseName, "Expected destination database name to be testdb1"); Assert.IsTrue( databaseCopyObj.IsContinuous, "Expected copy to be continuous"); Assert.IsTrue( databaseCopy2.First().BaseObject is Services.Server.DatabaseCopy, "Expecting a Database Copy object"); databaseCopyObj = (Services.Server.DatabaseCopy)databaseCopy2.Single().BaseObject; Assert.AreEqual( "testserver", databaseCopyObj.SourceServerName, "Expected source server name to be testserver"); Assert.AreEqual( "testdb2", databaseCopyObj.SourceDatabaseName, "Expected source database name to be testdb2"); Assert.AreEqual( "partnersrv", databaseCopyObj.DestinationServerName, "Expected destination server name to be partnersrv"); Assert.AreEqual( "testdb2", databaseCopyObj.DestinationDatabaseName, "Expected destination database name to be testdb2"); Assert.IsTrue( databaseCopyObj.IsContinuous, "Expected copy to be continuous"); } } }
/// <summary> /// Create continuous copy of testdb1 to partnersrv. /// </summary> /// <param name="powershell">The powershell instance containing the context.</param> /// <param name="contextVariable">The variable name that holds the server context.</param> /// <param name="copyVariable">The variable name that holds the copy object.</param> /// <param name="databaseName">The name of the database to copy.</param> public static void StartDatabaseContinuousCopyWithSqlAuth( System.Management.Automation.PowerShell powershell, string contextVariable, string copyVariable, string databaseName) { HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTest.Common.StartAzureSqlDatabaseContinuousCopyWithSqlAuth." + databaseName); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-1: Start database copy request case 0: case 1: DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; default: Assert.Fail("No more requests expected."); break; } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { Collection <PSObject> databaseCopy; using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { databaseCopy = powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"{0} = Start-AzureSqlDatabaseCopy " + @"-Context $context " + @"-DatabaseName {1} " + @"-PartnerServer partnersrv " + @"-ContinuousCopy", copyVariable, databaseName), copyVariable); } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); Assert.IsTrue( databaseCopy.Single().BaseObject is Services.Server.DatabaseCopy, "Expecting a Database Copy object"); Services.Server.DatabaseCopy databaseCopyObj = (Services.Server.DatabaseCopy)databaseCopy.Single().BaseObject; Assert.AreEqual( "testserver", databaseCopyObj.SourceServerName, "Unexpected source server name"); Assert.AreEqual( databaseName, databaseCopyObj.SourceDatabaseName, "Unexpected source database name"); Assert.AreEqual( "partnersrv", databaseCopyObj.DestinationServerName, "Unexpected destination server name"); Assert.AreEqual( databaseName, databaseCopyObj.DestinationDatabaseName, "Unexpected destination database name"); Assert.IsTrue( databaseCopyObj.IsContinuous, "Expected copy to be continuous"); } }
public void StopAzureSqlDatabaseContinuousCopyWithSqlAuth() { using (System.Management.Automation.PowerShell powershell = System.Management.Automation.PowerShell.Create()) { // Create a context NewAzureSqlDatabaseServerContextTests.CreateServerContextSqlAuth( powershell, "$context"); // Create 2 test databases NewAzureSqlDatabaseTests.CreateTestDatabasesWithSqlAuth( powershell, "$context"); // Start two continuous database copy operation StartAzureSqlDatabaseCopyTests.StartDatabaseContinuousCopyWithSqlAuth( powershell, "$context", "$copy1", "testdb1"); GetAzureSqlDatabaseCopyTests.WaitContinuousCopyCatchup( powershell, "$context", "$copy1"); HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTest.StopAzureSqlDatabaseContinuousCopyWithSqlAuth"); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-2: Stop Database Copy case 0: case 1: case 2: // Request 3-4: Retrieve all copies case 3: case 4: DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; default: //Assert.Fail("No more requests expected."); break; } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { powershell.InvokeBatchScript( @"Stop-AzureSqlDatabaseCopy " + @"-Context $context " + @"-DatabaseName testdb1"); } } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); WaitForCopyTermination(powershell, "$context"); } }