예제 #1
0
        /// <summary>
        /// Tests that a given connection is valid and can be opened.
        /// </summary>
        /// <param name="connectionInfo">The connection information.</param>
        public bool TestConnection(PSConnectionInfo connectionInfo)
        {
            if (connectionInfo == null)
            {
                throw new ArgumentNullException(nameof(connectionInfo));
            }

            try
            {
                using (var pshell = new PSClient())
                {
                    pshell.Open(connectionInfo);
                    pshell.Close();
                }

                return(true);
            }
            catch (PSRemotingTransportException)
            {
                return(false);
            }
            catch (OperationCanceledException)
            {
                return(false);
            }
        }
예제 #2
0
        /// <summary>
        /// Opens the connection.
        /// </summary>
        /// <param name="connectionInfo">The connection information.</param>
        public void Open(PSConnectionInfo connectionInfo)
        {
            if (connectionInfo == null)
            {
                throw new ArgumentNullException(nameof(connectionInfo));
            }
            this.Close();

            try
            {
                Runspace rrs = null;
                this.Host = new PSClientHost();

                if (connectionInfo.IsLocalConnection())
                {
                    // Local connection
                    rrs = RunspaceFactory.CreateRunspace
                          (
                        Host
                          );
                }
                else
                {
                    // Remote connection
                    rrs = RunspaceFactory.CreateRunspace
                          (
                        Host,
                        connectionInfo.ToRunspaceConnectionInfo()
                          );
                }

                rrs.Open();
                this.Runspace       = rrs;
                this.ConnectionInfo = connectionInfo;

                FileSystem = new PSFileSystem(this);
            }
            catch
            {
                this.Close();
                throw;
            }
        }
예제 #3
0
        /// <summary>
        /// Tests that a given connection is valid and can be opened, asynchronously.
        /// </summary>
        /// <param name="connectionInfo">The connection information.</param>
        public async Task <bool> TestConnectionAsync(PSConnectionInfo connectionInfo)
        {
            if (connectionInfo == null)
            {
                throw new ArgumentNullException(nameof(connectionInfo));
            }

            var task = Task.Run(() => TestConnection(connectionInfo));

            try
            {
                using (var ct = new CancellationTokenSource((int)connectionInfo.ConnectionTimeout.TotalMilliseconds))
                {
                    task.Wait(ct.Token);
                    return(await task);
                }
            }
            catch (OperationCanceledException)
            {
                return(false);
            }
        }
        /// <summary>
        /// Creates Remote PowerShell Connection Information for a given computer, using a standard
        /// UserName and Password combination.
        /// </summary>
        /// <param name="computerAddress">
        /// The computer address (IP Address, Machine Name (local network), FQDN, etc.)
        /// </param>
        /// <param name="userName">The UserName to connect with.</param>
        /// <param name="password">The Password to connect with.</param>
        /// <param name="customPort">(Optional) a custom port number to use.</param>
        public static PSConnectionInfo CreateRemoteConnection
        (
            string computerAddress,
            string userName,
            SecureString password,
            ushort?customPort = null
        )
        {
            var result = new PSConnectionInfo
            {
                ComputerAddress = computerAddress,
                Credentials     = new PSCredential
                                  (
                    userName,
                    password
                                  )
            };

            if (customPort.HasValue)
            {
                result.Port = customPort.Value;
            }
            return(result);
        }
예제 #5
0
 /// <summary>
 /// Opens the connection, asynchronously.
 /// </summary>
 /// <param name="connectionInfo">The connection information.</param>
 public async Task OpenAsync(PSConnectionInfo connectionInfo)
 {
     await Task.Run(() => Open(connectionInfo));
 }
예제 #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PSClient" /> class to a connected state.
 /// </summary>
 /// <param name="connectionInfo">The connection information.</param>
 public PSClient(PSConnectionInfo connectionInfo)
 {
     Open(connectionInfo);
 }