我有一个通过Intune推送并安装在用户计算机上的MSI。该MSI基本上是特定Web应用程序所需的Flash浏览器。我需要做的是创建一个自定义快捷方式,并在该快捷方式的目标中输入一个URL,以强制浏览器访问该网站(因为浏览器没有输入URL的位置)。
我在创建快捷方式方面没有任何问题,但是我想确保用户无法通过右键单击快捷方式并更改URL参数(允许他们通过此浏览器浏览google或facebook)来修改目标。
这是我目前拥有的快捷方式:
$Shell = New-Object -ComObject ("WScript.Shell")
$ShortCut = $Shell.CreateShortcut("C:\Users\Public\Desktop\Browser - PROD.lnk")
$ShortCut.TargetPath="C:\Program Files (x86)\Company\CompanyBrowser.exe"
$ShortCut.Arguments='-URL "https://company.url"'
$ShortCut.Save()
我将快捷方式弹出到公共桌面上,以便标准用户无法修改它,但是其中一些用户是其计算机上的本地管理员。我希望更改快捷方式属性中的“安全性”选项卡,以仅允许本地管理员帐户访问读取/执行,而不能修改此快捷方式。
我正在使用ACL函数,但似乎全部还是什么都没有,当我运行以下脚本时,它甚至完全无法执行该快捷方式
$ProdACL = Get-Acl -Path "C:\Users\Public\Desktop\Browser - PROD.lnk"
$identity = "BUILTIN\Administrators"
$fileSystemRights = "Modify"
$type = "Deny"
$fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type
$fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $fileSystemAccessRuleArgumentList
$ProdACL.SetAccessRule($fileSystemAccessRule)
Set-Acl -Path "C:\Users\Public\Desktop\Browser - PROD.lnk" -AclObject $ProdACL
我不是powershell专家,但我相信我很亲密,也许没有在ACL中使用正确的参数。
任何帮助将非常感激。
@道格·毛勒(Doug Maurer)是对的。
你需要先通过保留规则来删除继承:
$ProdACL = Get-Acl -Path "C:\Users\Public\Desktop\Browser - PROD.lnk"
$ProdACL.SetAccessRuleProtection($true, $true)
Set-Acl -Path "C:\Users\Public\Desktop\Browser - PROD.lnk" -AclObject $ProdACL
第一$True
对SetAccessRuleProtection
方法是阻止继承($False
继承)和第二是复制继承的规则($False
以清除继承的规则)。如果第一个值设置为,则忽略第二个值$False
。
然后,删除为管理员提供FullControl的规则:
$ProdACL = Get-Acl -Path "C:\Users\Public\Desktop\Browser - PROD.lnk"
$identity = "BUILTIN\Administrators"
$fileSystemRights = "FullControl"
$type = "Allow"
$fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type
$fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $fileSystemAccessRuleArgumentList
$ProdACL.RemoveAccessRule($fileSystemAccessRule)
Set-Acl -Path "C:\Users\Public\Desktop\Browser - PROD.lnk" -AclObject $ProdACL
请注意,将ACL设置为阻止继承后,你必须再次获取ACL。
我已经复制了你的代码,但是可以将其简化为(此处继承受阻):
#Block Inheritance
$ProdACL = Get-Acl -Path "C:\Users\Public\Desktop\Browser - PROD.lnk"
$ProdACL.SetAccessRuleProtection($true, $true)
Set-Acl -Path "C:\Users\Public\Desktop\Browser - PROD.lnk" -AclObject $ProdACL
# Set new ACL
$ProdACL = Get-Acl -Path "C:\Users\Public\Desktop\Browser - PROD.lnk"
$identity = "BUILTIN\Administrators"
$fileSystemAccessRule = $ProdACL.Access | Where IdentityReference -eq $identity
$ProdACL.RemoveAccessRule($fileSystemAccessRule)
Set-Acl -Path "C:\Users\Public\Desktop\Browser - PROD.lnk" -AclObject $ProdACL