private List<RdsServerDriveInfo> GetRdsServerDriveInfo(Runspace runspace, string serverName)
        {
            var result = new List<RdsServerDriveInfo>();
            Command cmd = new Command("Get-WmiObject");
            cmd.Parameters.Add("Class", "Win32_LogicalDisk");
            cmd.Parameters.Add("Filter", "DriveType=3");
            cmd.Parameters.Add("ComputerName", serverName);
            object[] errors = null;
            var psDrives = runspace.ExecuteShellCommand(cmd, false, PrimaryDomainController, out errors);

            if (errors.Any())
            {
                Log.WriteWarning(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
                return result;
            }            

            foreach (var psDrive in psDrives)
            {
                var driveInfo = new RdsServerDriveInfo()
                {
                    VolumeName = RdsRunspaceExtensions.GetPSObjectProperty(psDrive, "VolumeName").ToString(),
                    DeviceId = RdsRunspaceExtensions.GetPSObjectProperty(psDrive, "DeviceId").ToString(),
                    SizeMb = Math.Round(Convert.ToDouble(RdsRunspaceExtensions.GetPSObjectProperty(psDrive, "Size")) / 1024 / 1024, 1),
                    FreeSpaceMb = Math.Round(Convert.ToDouble(RdsRunspaceExtensions.GetPSObjectProperty(psDrive, "FreeSpace")) / 1024 / 1024, 1)
                };

                result.Add(driveInfo);
            }

            return result;
        }
        private string GetUserFullName(string domain, string userName, Runspace runspace)
        {
            Command cmd = new Command("Get-WmiObject");
            cmd.Parameters.Add("Class", "win32_useraccount");
            cmd.Parameters.Add("Filter", string.Format("Domain = '{0}' AND Name = '{1}'", domain, userName));
            var names = runspace.ExecuteShellCommand(cmd, false, PrimaryDomainController);

            if (names.Any())
            {
                return names.First().Members["FullName"].Value.ToString();
            }

            return "";
        }
        private RdsServerInfo GetServerInfo(Runspace runspace, string serverName)
        {
            var result = new RdsServerInfo();
            Command cmd = new Command("Get-WmiObject");
            cmd.Parameters.Add("Class", "Win32_Processor");
            cmd.Parameters.Add("ComputerName", serverName);

            object[] errors = null;
            var psProcInfo = runspace.ExecuteShellCommand(cmd, false, PrimaryDomainController, out errors).First();

            if (errors.Any())
            {
                Log.WriteWarning(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
                return result;
            }

            cmd = new Command("Get-WmiObject");
            cmd.Parameters.Add("Class", "Win32_OperatingSystem");
            cmd.Parameters.Add("ComputerName", serverName);

            var psMemoryInfo = runspace.ExecuteShellCommand(cmd, false, PrimaryDomainController, out errors).First();

            if (errors.Any())
            {
                Log.WriteWarning(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
                return result;
            }

            result.NumberOfCores = Convert.ToInt32(RdsRunspaceExtensions.GetPSObjectProperty(psProcInfo, "NumberOfCores"));
            result.MaxClockSpeed = Convert.ToInt32(RdsRunspaceExtensions.GetPSObjectProperty(psProcInfo, "MaxClockSpeed"));
            result.LoadPercentage = Convert.ToInt32(RdsRunspaceExtensions.GetPSObjectProperty(psProcInfo, "LoadPercentage"));
            result.MemoryAllocatedMb = Math.Round(Convert.ToDouble(RdsRunspaceExtensions.GetPSObjectProperty(psMemoryInfo, "TotalVisibleMemorySize")) / 1024, 1);
            result.FreeMemoryMb = Math.Round(Convert.ToDouble(RdsRunspaceExtensions.GetPSObjectProperty(psMemoryInfo, "FreePhysicalMemory")) / 1024, 1);
            result.Drives = GetRdsServerDriveInfo(runspace, serverName).ToArray();

            return result;
        }
        internal List<string> EditRdsCollectionSettingsInternal(RdsCollection collection, Runspace runspace)
        {
            object[] errors;
            Command cmd = new Command("Set-RDSessionCollectionConfiguration");
            cmd.Parameters.Add("CollectionName", collection.Name);            
            cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);

            if (string.IsNullOrEmpty(collection.Settings.ClientDeviceRedirectionOptions))
            {
                collection.Settings.ClientDeviceRedirectionOptions = "None";
            }

            var properties = collection.Settings.GetType().GetProperties();

            foreach(var prop in properties)
            {
                if (prop.Name.ToLower() != "id" && prop.Name.ToLower() != "rdscollectionid")
                {
                    var value = prop.GetValue(collection.Settings, null);

                    if (value != null)
                    {
                        cmd.Parameters.Add(prop.Name, value);
                    }
                }
            }

            runspace.ExecuteShellCommand(cmd, false, PrimaryDomainController, out errors);

            if (errors != null)
            {
                return errors.Select(e => e.ToString()).ToList();
            }

            return new List<string>();
        }
        internal List<RdsUserSession> GetRdsUserSessionsInternal(string collectionName, Runspace runSpace)
        {
            var result = new List<RdsUserSession>();
            var scripts = new List<string>();
            scripts.Add(string.Format("Get-RDUserSession -ConnectionBroker {0} - CollectionName {1} | ft CollectionName, Username, UnifiedSessionId, SessionState, HostServer", ConnectionBroker, collectionName));            
            object[] errors;
            Command cmd = new Command("Get-RDUserSession");
            cmd.Parameters.Add("CollectionName", collectionName);
            cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);
            var userSessions = runSpace.ExecuteShellCommand(cmd, false, PrimaryDomainController, out errors);            
            var properties = typeof(RdsUserSession).GetProperties();            

            foreach(var userSession in  userSessions)
            {
                object collectionNameObj = RdsRunspaceExtensions.GetPSObjectProperty(userSession, "CollectionName");
                object domainName = RdsRunspaceExtensions.GetPSObjectProperty(userSession, "DomainName");
                object hostServer = RdsRunspaceExtensions.GetPSObjectProperty(userSession, "HostServer");
                object sessionState = RdsRunspaceExtensions.GetPSObjectProperty(userSession, "SessionState");
                object unifiedSessionId = RdsRunspaceExtensions.GetPSObjectProperty(userSession, "UnifiedSessionId");
                object samAccountName = RdsRunspaceExtensions.GetPSObjectProperty(userSession, "UserName");

                var session = new RdsUserSession
                {
                    CollectionName = collectionNameObj != null ? collectionNameObj.ToString() : "",
                    DomainName = domainName != null ? domainName.ToString() : "",
                    HostServer = hostServer != null ? hostServer.ToString() : "",
                    SessionState = sessionState != null ? sessionState.ToString() : "",
                    UnifiedSessionId = unifiedSessionId != null ? unifiedSessionId.ToString() : "",
                    SamAccountName = samAccountName != null ? samAccountName.ToString() : ""
                };                                
                                
                session.IsVip = false;
                session.UserName = GetUserFullName(session.DomainName, session.SamAccountName, runSpace);
                result.Add(session);
            }

            return result;
        }
        internal PSObject AddFeature(Runspace runSpace, string featureName, bool includeAllSubFeature = true, bool restart = false)
        {
            Command cmd = new Command("Add-WindowsFeature");
            cmd.Parameters.Add("Name", featureName);

            if (includeAllSubFeature)
            {
                cmd.Parameters.Add("IncludeAllSubFeature", true);
            }

            if (restart)
            {
                cmd.Parameters.Add("Restart", true);
            }

            return runSpace.ExecuteShellCommand(cmd, false, PrimaryDomainController).FirstOrDefault();
        }
        internal bool ItemExists(Runspace runSpace, string path)
        {
            Command testPathCommand = new Command("Test-Path");
            testPathCommand.Parameters.Add("Path", path);

            var testPathResult = runSpace.ExecuteShellCommand(testPathCommand, false, PrimaryDomainController).First();

            var result = Convert.ToBoolean(testPathResult.ToString());

            return result;
        }
        internal void RemoveItem(Runspace runSpace, string path)
        {
            Command rdRapCommand = new Command("Remove-Item");
            rdRapCommand.Parameters.Add("Path", path);
            rdRapCommand.Parameters.Add("Force", true);
            rdRapCommand.Parameters.Add("Recurse", true);

            runSpace.ExecuteShellCommand(rdRapCommand, false, PrimaryDomainController);
        }
        internal bool IsFeatureInstalled(string featureName, Runspace runSpace)
        {
            bool isInstalled = false;
            Command cmd = new Command("Get-WindowsFeature");
            cmd.Parameters.Add("Name", featureName);
            var feature = runSpace.ExecuteShellCommand(cmd, false, PrimaryDomainController).FirstOrDefault();

            if (feature != null)
            {
                isInstalled = (bool)RdsRunspaceExtensions.GetPSObjectProperty(feature, "Installed");
            }

            return isInstalled;
        }
Beispiel #10
0
        private void AddUserGroupsToCollection(Runspace runSpace, string collectionName, List<string> groups)
        {
            Command cmd = new Command("Set-RDSessionCollectionConfiguration");
            cmd.Parameters.Add("CollectionName", collectionName);
            cmd.Parameters.Add("UserGroup", groups);
            cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);

            runSpace.ExecuteShellCommand(cmd, false, PrimaryDomainController).FirstOrDefault();
        }
Beispiel #11
0
        private bool ExistRdsServerInDeployment(Runspace runSpace, RdsServer server)
        {
            Command cmd = new Command("Get-RDserver");
            cmd.Parameters.Add("Role", "RDS-RD-SERVER");
            cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);

            var serversPs = runSpace.ExecuteShellCommand(cmd, false, PrimaryDomainController);

            if (serversPs != null)
            {
                foreach (var serverPs in serversPs)
                {
                    var serverName = Convert.ToString(RdsRunspaceExtensions.GetPSObjectProperty(serverPs, "Server"));

                    if (string.Compare(serverName, server.FqdName, StringComparison.InvariantCultureIgnoreCase) == 0)
                    {
                        return true;
                    }
                }
            }

            return false;
        }
Beispiel #12
0
        private void AddRdsServerToDeployment(Runspace runSpace, RdsServer server)
        {
            Command cmd = new Command("Add-RDserver");
            cmd.Parameters.Add("Server", server.FqdName);
            cmd.Parameters.Add("Role", "RDS-RD-SERVER");
            cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);

            runSpace.ExecuteShellCommand(cmd, false, PrimaryDomainController);
        }   
Beispiel #13
0
        private object[] DeleteCertificateFile(string destinationPath, Runspace runspace)
        {
            var scripts = new List<string>
            {
                string.Format("Remove-Item -Path \"{0}\" -Force", destinationPath)
            };

            object[] errors = null;
            runspace.ExecuteShellCommand(scripts, out errors);

            return errors;
        }
Beispiel #14
0
        private object[] CopyCertificateFile(Runspace runspace, string filePath, string destinationPath)
        {                                  
            var scripts = new List<string>
            {
                string.Format("Copy-Item \"{0}\" -Destination \"{1}\" -Force", filePath, destinationPath)
            };

            object[] errors = null;
            runspace.ExecuteShellCommand(scripts, out errors);            

            return errors;
        }