我有一个与mklink建立符号链接的批处理脚本。当我作为管理员或系统帐户(使用psexec -s -e)运行它时,它可以正常工作。但是,当我试图在GPO中使用它作为启动脚本时,它会给出一个错误:“您没有足够的权限在目标计算机上执行此操作”。Windows 7 Pro SP1 x64。UAC是残疾的。
批处理示例:
mklink C:\log\cmd.link.exe C:\Windows\System32\cmd.exe >> C:\log\symlink.log 2>&1我还试图将它封装到一个powershell脚本中:
Start-Process -FilePath "$env:windir\system32\cmd.exe" -ArgumentList "/c mklink C:\log\cmd.link.exe C:\Windows\System32\cmd.exe >> C:\log\symlink.txt 2>&1" -Verb RunAs但也有同样的错误。我做错了什么?
也许还有另一种方法可以用GPO或PowerShell创建一个SymLink?
发布于 2015-10-09 10:22:28
看来,组策略客户端 (gpsvc)服务(因为GPO脚本以其特权运行)不包含创建symolic链接(SeCreateSymbolicLinkPrivilege)的特权:
C:\>sc qprivs gpsvc
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: gpsvc
PRIVILEGES : SeTakeOwnershipPrivilege
: SeIncreaseQuotaPrivilege
: SeAssignPrimaryTokenPrivilege
: SeSecurityPrivilege
: SeChangeNotifyPrivilege
: SeCreatePermanentPrivilege
: SeShutdownPrivilege
: SeLoadDriverPrivilege
: SeRestorePrivilege
: SeBackupPrivilege如果我想使用这一特权,我首先应该授予这一特权服务。这可以通过以下命令来完成:
sc privs gpsvc SeTakeOwnershipPrivilege/SeIncreaseQuotaPrivilege/SeAssignPrimaryTokenPrivilege/SeSecurityPrivilege/SeChangeNotifyPrivilege/SeCreatePermanentPrivilege/SeShutdownPrivilege/SeLoadDriverPrivilege/SeRestorePrivilege/SeBackupPrivilege/SeCreateSymbolicLinkPrivilege之后,您将能够在GPO脚本中使用mklink。
有几个注意事项:
psexec或GPO脚本(不确定)。psexec,它会抛出一个关于参数太长的错误。因此,您应该将这个命令保存为一个.bat文件,然后使用psexec运行它。非常感谢@PetSerAl,他帮我找到了这个。
发布于 2021-07-29 20:03:44
在通过组策略以sc.exe作为启动脚本运行PowerShell命令时,我仍然遇到了问题。每个Start-Transcript日志文件都被拒绝访问。例如,我使用了下面的PowerShell逻辑,在我的情况下,它对我不起作用。
我使用PowerShell.exe、-verb RunAs、Start-Process尝试了多个事物和语法的几种变体,但是没有将其作为本地脚本运行,而任务调度器是我试图避免的SYSTEM。
注:--这只是一个普通的例子,说明一个变体失败了,结果和所有其他变体的输出相同。
$privs = (sc.exe qprivs gpsvc).Split(":")[5..99] | % { Process { If( $_.Trim().Length -gt 0 ){ $_.Trim() } } };
$privs = $privs + "SeCreateSymbolicLinkPrivilege";
$privs = $privs -Join "/";
Invoke-Expression "sc.exe privs gpsvc $privs"有效的解决方案(在我的例子中)
我通过组策略使用下面的PowerShell逻辑作为启动脚本,现在创建符号链接工作。为了保持示例的简单性,我使用Google进行泛化。
基本上,我不得不操作服务相关权限的多字符串注册表值,而不是以这种方式使用sc.exe附加所需的"SeCreateSymbolicLinkPrivilege"值。
#Start-Transcript -Path C:\Log\Transcript.txt
$v = (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\gpsvc").RequiredPrivileges;
If ( $v -notcontains "SeCreateSymbolicLinkPrivilege" ) {
$v = $v + "SeCreateSymbolicLinkPrivilege";
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\gpsvc" RequiredPrivileges $v -Type MultiString;
};
$Chrome86 = "C:\Program Files (x86)\Google\Chrome";
$Chrome = "C:\Program Files\Google\Chrome";
If(!(Test-Path $Chrome86)){
If(Test-Path $Chrome){New-Item -Path $Chrome86 -ItemType SymbolicLink -Value $Chrome -Force}
}
If(!(Test-Path $Chrome)){
If(Test-Path $Chrome86){New-Item -Path $Chrome -ItemType SymbolicLink -Value $Chrome86 -Force}
}https://stackoverflow.com/questions/33009154
复制相似问题