我还处于另一个障碍。 我有一个非pipe理员的IIS身份帐户,我想授予权限来启动,停止,重新启动和读取一个Windows服务的状态。 我遵循这里发布的解决scheme。 不过,我想通过PowerShell来实现这一点,因为我有这么多的服务器。 我能够获得非pipe理员帐号的SID,并获得命令的输出并将其保存在一个variables下。 我转换为string,但不能应用任何function,如StartsWith , split , insert等这里是我的代码:
#Getting the SID for non-admin ISS identity account $objUser = New-Object System.Security.Principal.NTAccount("non-admin") $strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier]) $sid = $strSID.Value #output retuned = S-1-5-21-2103278432-2794320136-1883075150-1000 #Storing the output of cmd prompt $cmd = cmd.exe /c "sc sdshow <Service_Name>" $test = $cmd | Out-String #output returned = D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD) #Storing the value that needs to be inserted in $CMD $str = "(A;;RPWPCR;;;$sid)"
我想在$ test的“S:”之前插入$ str,但是我没有成功。 我想通过PowerShell而不是SubInAcl实现这一点。 任何帮助,将不胜感激。 最终的代码应该如下所示:
sc sdset <SERVICE_NAME> "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)($str)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
假设你的$testvariables包含D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD) ,你可以这样做:
$sid = "S-1-5-21-2103278432-2794320136-1883075150-1000" $test = "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)" $str = "(A;;RPWPCR;;;$sid)" $newstring = $test -replace "S:","$($str)S:" $newstring
收益:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2103278432-2794320136-1883075150-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)