Edit C:\Windows\System32\ServerManagerInternal\RDManagement\Add-RDSessionHost.xaml
??<Activity mc:Ignorable="sads sap" x:Class="RDManagement.AddTo_RDSHCollection" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mpa="clr-namespace:Microsoft.PowerShell.Activities;assembly=Microsoft.PowerShell.Activities" xmlns:mpua="clr-namespace:Microsoft.PowerShell.Utility.Activities;assembly=Microsoft.PowerShell.Utility.Activities" xmlns:mrc="clr-namespace:Microsoft.RemoteDesktopServices.Common;assembly=Microsoft.RemoteDesktopServices.Management.Activities" xmlns:mrma="clr-namespace:Microsoft.RemoteDesktopServices.Management.Activities;assembly=Microsoft.RemoteDesktopServices.Management.Activities" xmlns:mrmc="clr-namespace:Microsoft.RemoteDesktopServices.Management.Cmdlets;assembly=Microsoft.RemoteDesktopServices.Management.Activities" xmlns:mv="clr-namespace:Microsoft.VisualBasic;assembly=System" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:s1="clr-namespace:System;assembly=System" xmlns:s2="clr-namespace:System;assembly=System.Xml" xmlns:s3="clr-namespace:System;assembly=System.Core" xmlns:s4="clr-namespace:System;assembly=System.ServiceModel" xmlns:sa="clr-namespace:System.Activities;assembly=System.Activities" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sads="http://schemas.microsoft.com/netfx/2010/xaml/activities/debugger" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:sc="clr-namespace:System.Collections;assembly=mscorlib" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System" xmlns:scg1="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel" xmlns:scg2="clr-namespace:System.Collections.Generic;assembly=System.Core" xmlns:scg3="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:sd="clr-namespace:System.Data;assembly=System.Data" xmlns:sl="clr-namespace:System.Linq;assembly=System.Core" xmlns:sma="clr-namespace:System.Management.Automation;assembly=System.Management.Automation" xmlns:st="clr-namespace:System.Text;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <x:Members> <x:Property Name="RDManagementServer" Type="InArgument(x:String)"> <x:Property.Attributes> <RequiredArgumentAttribute /> </x:Property.Attributes> </x:Property> <x:Property Name="CollectionAlias" Type="InArgument(x:String)"> <x:Property.Attributes> <RequiredArgumentAttribute /> </x:Property.Attributes> </x:Property> <x:Property Name="RDSHServer" Type="InArgument(s:String[])"> <x:Property.Attributes> <RequiredArgumentAttribute /> </x:Property.Attributes> </x:Property> </x:Members> <sap:VirtualizedContainerService.HintSize>1045,4718</sap:VirtualizedContainerService.HintSize> <mva:VisualBasic.Settings>Assembly references and imported namespaces for internal implementation</mva:VisualBasic.Settings> <Sequence DisplayName="Add RDSH server to a collection" sap:VirtualizedContainerService.HintSize="1005,4678"> <Sequence.Variables> <Variable x:TypeArguments="sma:PSDataCollection(sma:ErrorRecord)" Name="Errors" /> <Variable x:TypeArguments="sma:PSDataCollection(sma:PSObject)" Name="Null" /> <Variable x:TypeArguments="s:String[]" Name="RemoteDesktopUsers" /> <Variable x:TypeArguments="x:Int32" Default="1" Modifiers="ReadOnly" Name="ProgressID" /> <Variable x:TypeArguments="x:Int32" Default="20" Name="CurrentProgress" /> <Variable x:TypeArguments="sma:ErrorRecord" Name="catchErrorRecord" /> </Sequence.Variables> <sap:WorkflowViewStateService.ViewState> <scg3:Dictionary x:TypeArguments="x:String, x:Object"> <x:Boolean x:Key="IsExpanded">True</x:Boolean> </scg3:Dictionary> </sap:WorkflowViewStateService.ViewState> <mpua:WriteProgress Activity="Add-RDSessionHost" DisplayName="Progress : 0" sap:VirtualizedContainerService.HintSize="983,22" PercentComplete="0" ProgressId="[ProgressID]" Status="In Progress..." /> <mpua:WriteVerbose DisplayName="Verbose: Input" sap:VirtualizedContainerService.HintSize="983,22" Message="["Management Server: " + RDManagementServer + Environment.NewLine +
"Collection Alias: " + CollectionAlias + Environment.NewLine +
"RDSH Server: " + String.Join(", ", RDSHServer)]" /> <Sequence DisplayName="Initialize" sap:VirtualizedContainerService.HintSize="983,570"> <Sequence.Variables> <Variable x:TypeArguments="sma:PSDataCollection(sma:PSObject)" Name="InlineScriptResult" /> </Sequence.Variables> <sap:WorkflowViewStateService.ViewState> <scg3:Dictionary x:TypeArguments="x:String, x:Object"> <x:Boolean x:Key="IsExpanded">True</x:Boolean> </scg3:Dictionary> </sap:WorkflowViewStateService.ViewState> <mpa:InlineScript Command="import-module $env:windir\System32\ServerManagerInternal\rdmanagement;
Get-RDSHPool -Alias * -ManagementServer $using:RDManagementServer | ?{$_.Alias -eq $using:CollectionAlias}" sap:VirtualizedContainerService.HintSize="616,98" PSError="[Errors]" Result="[InlineScriptResult]" /> <If Condition="[Errors.Count <> 0]" DisplayName="Quit If Error" sap:VirtualizedContainerService.HintSize="616,208"> <If.Then> <TerminateWorkflow Exception="[Errors(0).Exception]" sap:VirtualizedContainerService.HintSize="200,22" /> </If.Then> </If> <Assign sap:VirtualizedContainerService.HintSize="616,60"> <Assign.To> <OutArgument x:TypeArguments="s:String[]">[RemoteDesktopUsers]</OutArgument> </Assign.To> <Assign.Value> <InArgument x:TypeArguments="s:String[]">[CType(InlineScriptResult(0).Properties("Users").Value, String())]</InArgument> </Assign.Value> </Assign> </Sequence> <mpua:WriteVerbose DisplayName="Verbose: CB & RDU" sap:VirtualizedContainerService.HintSize="983,22" Message="["Remote Desktop Users: " + String.Join(", ", RemoteDesktopUsers)]" /> <mpua:WriteProgress Activity="Add-RDSessionHost" DisplayName="Progress : 20" sap:VirtualizedContainerService.HintSize="983,22" PercentComplete="20" ProgressId="[ProgressID]" Status="In Progress..." /> <ForEach x:TypeArguments="x:String" DisplayName="Configure all RDSH servers" sap:VirtualizedContainerService.HintSize="983,3634" Values="[RDSHServer]"> <ActivityAction x:TypeArguments="x:String"> <ActivityAction.Argument> <DelegateInArgument x:TypeArguments="x:String" Name="server" /> </ActivityAction.Argument> <Sequence DisplayName="Configure RD Session Host" sap:VirtualizedContainerService.HintSize="953,3526"> <Sequence.Variables> <Variable x:TypeArguments="sma:PSDataCollection(sma:ErrorRecord)" Default="[New PSDataCollection(Of ErrorRecord)()]" Name="LoopErrors1" /> <Variable x:TypeArguments="sma:PSDataCollection(sma:ErrorRecord)" Default="[New PSDataCollection(Of ErrorRecord)()]" Name="LoopErrors2" /> </Sequence.Variables> <sap:WorkflowViewStateService.ViewState> <scg3:Dictionary x:TypeArguments="x:String, x:Object"> <x:Boolean x:Key="IsExpanded">True</x:Boolean> </scg3:Dictionary> </sap:WorkflowViewStateService.ViewState> <TryCatch sap:VirtualizedContainerService.HintSize="931,3402"> <TryCatch.Try> <Sequence sap:VirtualizedContainerService.HintSize="913,3215"> <Sequence.Variables> <Variable x:TypeArguments="x:String" Name="serverDomain" /> <Variable x:TypeArguments="x:String" Name="serverNetbios" /> </Sequence.Variables> <sap:WorkflowViewStateService.ViewState> <scg3:Dictionary x:TypeArguments="x:String, x:Object"> <x:Boolean x:Key="IsExpanded">True</x:Boolean> </scg3:Dictionary> </sap:WorkflowViewStateService.ViewState> <Assign sap:VirtualizedContainerService.HintSize="891,60"> <Assign.To> <OutArgument x:TypeArguments="x:String">[serverDomain]</OutArgument> </Assign.To> <Assign.Value> <InArgument x:TypeArguments="x:String">[Microsoft.RemoteDesktopServices.Common.CommonUtility.GetDomainNameFromLiveComputer(server)]</InArgument> </Assign.Value> </Assign> <Assign sap:VirtualizedContainerService.HintSize="891,60"> <Assign.To> <OutArgument x:TypeArguments="x:String">[serverNetbios]</OutArgument> </Assign.To> <Assign.Value> <InArgument x:TypeArguments="x:String">[Microsoft.RemoteDesktopServices.Common.CommonUtility.GetNetbiosNameFromLiveComputer(server)]</InArgument> </Assign.Value> </Assign> <mpa:InlineScript Command="function Add-SecurityGroupMember { 
param ( 
 [Parameter(Mandatory=$TRUE)]
 [string]
 $GroupSID, 
 
 [Parameter(Mandatory=$TRUE)]
 [string[]]
 $Member,
 
 [switch]
 $IsComputer 
) 
 try {
 $sid = New-Object System.Security.Principal.SecurityIdentifier $GroupSID
 $groupName = $sid.Translate([System.Security.Principal.NTAccount]).Value.split('\')[1]
 $directoryEntry = [ADSI]('WinNT://{0}/{1},group' -f $Env:COMPUTERNAME, $groupName)
 }
 catch { throw $_ }
 
 foreach($entry in $Member) {
 $memberPath = 'WinNT:/'
 $parts = $entry -split '\\'
 foreach ($part in $parts) { 
 $memberPath = $memberPath + '/' + $part;
 }
 
 if ($IsComputer) {
 $memberPath = $memberPath + '$'
 }
 
 $directoryEntry.Invoke('Add', $memberPath)
 }
}

$memberComputer = $using:serverDomain + "\" + $using:serverNetbios;
Add-SecurityGroupMember -GroupSID 'S-1-5-32-576' -Member $memberComputer -IsComputer -ErrorAction Silentlycontinue" DisplayName="Add RDSH Servers to 'End point servers' " sap:VirtualizedContainerService.HintSize="891,623" PSComputerName="[{RDManagementServer}]" PSError="[LoopErrors1]" Result="[Null]" /> <Sequence DisplayName="Update Progress" sap:VirtualizedContainerService.HintSize="891,246"> <sap:WorkflowViewStateService.ViewState> <scg3:Dictionary x:TypeArguments="x:String, x:Object"> <x:Boolean x:Key="IsExpanded">True</x:Boolean> </scg3:Dictionary> </sap:WorkflowViewStateService.ViewState> <Assign sap:VirtualizedContainerService.HintSize="242,60"> <Assign.To> <OutArgument x:TypeArguments="x:Int32">[CurrentProgress]</OutArgument> </Assign.To> <Assign.Value> <InArgument x:TypeArguments="x:Int32">[CurrentProgress + (20 \ RDSHServer.Length)]</InArgument> </Assign.Value> </Assign> <mpua:WriteProgress Activity="Add-RDSessionHost" DisplayName="Progress : Current" sap:VirtualizedContainerService.HintSize="242,22" PercentComplete="[CurrentProgress]" ProgressId="[ProgressID]" Status="In Progress..." /> </Sequence> <If Condition="[LoopErrors1.Count <> 0]" DisplayName="Write RDMS Error" sap:VirtualizedContainerService.HintSize="891,1942"> <If.Then> <Sequence DisplayName="Error!" sap:VirtualizedContainerService.HintSize="286,432"> <Sequence sap:VirtualizedContainerService.HintSize="264,246"> <Assign sap:VirtualizedContainerService.HintSize="242,60"> <Assign.To> <OutArgument x:TypeArguments="sma:ErrorRecord">[catchErrorRecord]</OutArgument> </Assign.To> <Assign.Value> <InArgument x:TypeArguments="sma:ErrorRecord">[ErrorUtility.GetErrorRecord(RDManagementResources.ResourceManager.GetString("FailedToSetSessionHostObjects"), server, ErrorId.ConfigureRDSessionHost, LoopErrors1(0).Exception)]</InArgument> </Assign.Value> </Assign> <mpua:WriteError DisplayName="Write-Error" ErrorRecord="[catchErrorRecord]" sap:VirtualizedContainerService.HintSize="242,22" /> </Sequence> <Sequence DisplayName="Update Progress" sap:VirtualizedContainerService.HintSize="264,246"> <Assign sap:VirtualizedContainerService.HintSize="242,60"> <Assign.To> <OutArgument x:TypeArguments="x:Int32">[CurrentProgress]</OutArgument> </Assign.To> <Assign.Value> <InArgument x:TypeArguments="x:Int32">[CurrentProgress + (60 \ RDSHServer.Length)]</InArgument> </Assign.Value> </Assign> <mpua:WriteProgress Activity="Add-RDSessionHost" DisplayName="Progress : Current" sap:VirtualizedContainerService.HintSize="242,22" PercentComplete="[CurrentProgress]" ProgressId="[ProgressID]" Status="In Progress..." /> </Sequence> </Sequence> </If.Then> <If.Else> <Sequence DisplayName="Configure" sap:VirtualizedContainerService.HintSize="580,1794"> <mpa:InlineScript Command="import-module $env:windir\System32\ServerManagerInternal\rdmanagement;
Add-RDSHServer -Name $using:server -CollectionAlias $using:CollectionAlias -ConnectionBroker $using:RDManagementServer -ManagementServer $using:RDManagementServer" sap:VirtualizedContainerService.HintSize="558,188" /> <Sequence DisplayName="Update Progress" sap:VirtualizedContainerService.HintSize="558,246"> <Assign sap:VirtualizedContainerService.HintSize="242,60"> <Assign.To> <OutArgument x:TypeArguments="x:Int32">[CurrentProgress]</OutArgument> </Assign.To> <Assign.Value> <InArgument x:TypeArguments="x:Int32">[CurrentProgress + (30 \ RDSHServer.Length)]</InArgument> </Assign.Value> </Assign> <mpua:WriteProgress Activity="Add-RDSessionHost" DisplayName="Progress : Current" sap:VirtualizedContainerService.HintSize="242,22" PercentComplete="[CurrentProgress]" ProgressId="[ProgressID]" Status="In Progress..." /> </Sequence> <mpa:InlineScript Command="function Get-SecurityGroupMember { param ([Parameter(Mandatory=$TRUE)] [string] $GroupSID ) try { $sid = New-Object System.Security.Principal.SecurityIdentifier $GroupSID; $groupName = $sid.Translate([System.Security.Principal.NTAccount]).Value.split('\')[1]; $directoryEntry = [ADSI]('WinNT://{0}/{1},group' -f $Env:COMPUTERNAME, $groupName); foreach($member in $directoryEntry.Invoke('Members', $NULL)) { $objPath = (New-Object System.DirectoryServices.DirectoryEntry $member).Path; if ($objPath -match '^WinNT://(.*)$') { ($matches[1]) -replace '/', '\' } } } catch { throw $_ } }; function Add-SecurityGroupMember { param ( [Parameter(Mandatory=$TRUE)] [string] $GroupSID, [Parameter(Mandatory=$TRUE)] [string[]] $Member, [switch] $IsComputer ) try { $sid = New-Object System.Security.Principal.SecurityIdentifier $GroupSID; $groupName = $sid.Translate([System.Security.Principal.NTAccount]).Value.split('\')[1]; $directoryEntry = [ADSI]('WinNT://{0}/{1},group' -f $Env:COMPUTERNAME, $groupName) } catch { throw $_ }; foreach($entry in $Member) { $memberPath = 'WinNT:/'; $parts = $entry -split '\\'; foreach ($part in $parts) { $memberPath = $memberPath + '/' + $part; }; if ($IsComputer) { $memberPath = $memberPath + '$' }; $directoryEntry.Invoke('Add', $memberPath); } }; function Remove-SecurityGroupMember { param ( [Parameter(Mandatory=$TRUE)] [string] $GroupSID, [Parameter(Mandatory=$TRUE)] [string[]] $Member, [switch] $IsComputer ) try { $sid = New-Object System.Security.Principal.SecurityIdentifier $GroupSID; $groupName = $sid.Translate([System.Security.Principal.NTAccount]).Value.split('\')[1]; $directoryEntry = [ADSI]('WinNT://{0}/{1},group' -f $Env:COMPUTERNAME, $groupName) } catch { throw $_ }; foreach($entry in $Member) { $memberPath = 'WinNT:/'; $parts = $entry -split '\\'; foreach ($part in $parts) { $memberPath = $memberPath + '/' + $part; }; if ($IsComputer) { $memberPath = $memberPath + '$' }; $directoryEntry.Invoke('Remove', $memberPath); } }; function Set-SecurityGroupMember { param ( [Parameter(Mandatory=$TRUE)] [string] $GroupSID, [Parameter(Mandatory=$TRUE)] [string[]] $Member, [switch] $IsComputer ) Get-SecurityGroupMember $GroupSID | %{Remove-SecurityGroupMember $GroupSID $_}; Add-SecurityGroupMember $GroupSID $Member -IsComputer:$IsComputer }; Set-SecurityGroupMember -GroupSID 'S-1-5-32-555' -Member $using:RemoteDesktopUsers" DisplayName="Add User to 'Remote Desktop Users' " sap:VirtualizedContainerService.HintSize="558,188" PSComputerName="[{server}]" PSError="[LoopErrors2]" Result="[Null]" /> <If Condition="[LoopErrors2.Count <> 0]" DisplayName="Write RDMS Error" sap:VirtualizedContainerService.HintSize="558,642"> <If.Then> <Sequence sap:VirtualizedContainerService.HintSize="264,246"> <Assign sap:VirtualizedContainerService.HintSize="242,60"> <Assign.To> <OutArgument x:TypeArguments="sma:ErrorRecord">[catchErrorRecord]</OutArgument> </Assign.To> <Assign.Value> <InArgument x:TypeArguments="sma:ErrorRecord">[ErrorUtility.GetErrorRecord(RDManagementResources.ResourceManager.GetString("FailedToSetSessionHostObjects"), server,-1, LoopErrors2(0).Exception)]</InArgument> </Assign.Value> </Assign> <mpua:WriteError DisplayName="Write-Error" ErrorRecord="[catchErrorRecord]" sap:VirtualizedContainerService.HintSize="242,22" /> </Sequence> </If.Then> <If.Else> <Sequence DisplayName="Write Status Object" sap:VirtualizedContainerService.HintSize="240,494"> <Sequence.Variables> <Variable x:TypeArguments="sma:PSObject" Default="[New PSObject()]" Name="StatusObject" /> </Sequence.Variables> <InvokeMethod sap:VirtualizedContainerService.HintSize="218,134" MethodName="Add"> <InvokeMethod.TargetObject> <InArgument x:TypeArguments="sma:PSMemberInfoCollection(sma:PSPropertyInfo)">[StatusObject.Properties]</InArgument> </InvokeMethod.TargetObject> <InArgument x:TypeArguments="sma:PSNoteProperty">[New PSNoteProperty("ServerName", server)]</InArgument> </InvokeMethod> <InvokeMethod sap:VirtualizedContainerService.HintSize="218,134" MethodName="Add"> <InvokeMethod.TargetObject> <InArgument x:TypeArguments="sma:PSMemberInfoCollection(sma:PSPropertyInfo)">[StatusObject.Properties]</InArgument> </InvokeMethod.TargetObject> <InArgument x:TypeArguments="sma:PSNoteProperty">[New PSNoteProperty("Success", True)]</InArgument> </InvokeMethod> <mpua:WriteOutput DisplayName="Write-Output" sap:VirtualizedContainerService.HintSize="218,22" InputObject="[{StatusObject}]" /> </Sequence> </If.Else> </If> <Sequence DisplayName="Update Progress" sap:VirtualizedContainerService.HintSize="558,246"> <Assign sap:VirtualizedContainerService.HintSize="242,60"> <Assign.To> <OutArgument x:TypeArguments="x:Int32">[CurrentProgress]</OutArgument> </Assign.To> <Assign.Value> <InArgument x:TypeArguments="x:Int32">[CurrentProgress + (30 \ RDSHServer.Length)]</InArgument> </Assign.Value> </Assign> <mpua:WriteProgress Activity="Add-RDSessionHost" DisplayName="Progress : Current" sap:VirtualizedContainerService.HintSize="242,22" PercentComplete="[CurrentProgress]" ProgressId="[ProgressID]" Status="In Progress..." /> </Sequence> </Sequence> </If.Else> </If> </Sequence> </TryCatch.Try> <TryCatch.Catches> <Catch x:TypeArguments="s:Exception" sap:VirtualizedContainerService.HintSize="490,21"> <ActivityAction x:TypeArguments="s:Exception"> <ActivityAction.Argument> <DelegateInArgument x:TypeArguments="s:Exception" Name="exception" /> </ActivityAction.Argument> <Sequence sap:VirtualizedContainerService.HintSize="264,246"> <Assign sap:VirtualizedContainerService.HintSize="242,60"> <Assign.To> <OutArgument x:TypeArguments="sma:ErrorRecord">[catchErrorRecord]</OutArgument> </Assign.To> <Assign.Value> <InArgument x:TypeArguments="sma:ErrorRecord">[ErrorUtility.GetErrorRecord(RDManagementResources.ResourceManager.GetString("FailedToSetSessionHostObjects"), server, ErrorId.ConfigureRDSessionHost, exception)]</InArgument> </Assign.Value> </Assign> <mpua:WriteError DisplayName="Write-Error" ErrorRecord="[catchErrorRecord]" sap:VirtualizedContainerService.HintSize="242,22" /> </Sequence> </ActivityAction> </Catch> </TryCatch.Catches> </TryCatch> </Sequence> </ActivityAction> </ForEach> <mpua:WriteProgress Activity="Add-RDSessionHost" Completed="[True]" DisplayName="Progress : 100" sap:VirtualizedContainerService.HintSize="200,22" PercentComplete="100" ProgressId="[ProgressID]" Status="In Progress..." /> </Sequence> </Activity>
Ms-Dos/Windows
Unix
Write backup
jsp File Browser version 1.2 by
www.vonloesch.de