Windows很难创建一个具有匿名访问权限的网络共享(换句话说,主机不知道哪些用户可以访问)。
我知道有一种方法可以从GUI中完成此操作(https://serverfault.com/questions/272409/setting-up-an-anonymous-windows-server-2008-network-share),但是否有一种仅使用PowerShell更改安全策略和创建匿名网络共享的方法? 编辑 这是我运行Ansgar Wiechers发布的WMI脚本时出现的情况。我会收到一个异常,但共享仍然成功挂载: 然而,当我尝试从同一网络上的另一个计算机连接到该共享时,仍会提示我输入用户名和密码,如下所示:
net share ShareName=C:\DesiredShareSource /GRANT:EVERYONE,FULL
允许所有人访问,但这不包括匿名访问(例如,未加入域的用户,而无需提示凭据)。我知道有一种方法可以从GUI中完成此操作(https://serverfault.com/questions/272409/setting-up-an-anonymous-windows-server-2008-network-share),但是否有一种仅使用PowerShell更改安全策略和创建匿名网络共享的方法? 编辑 这是我运行Ansgar Wiechers发布的WMI脚本时出现的情况。我会收到一个异常,但共享仍然成功挂载: 然而,当我尝试从同一网络上的另一个计算机连接到该共享时,仍会提示我输入用户名和密码,如下所示:
我希望您能通过命令行设置匿名访问(无需用户名和密码)。这是我在Win7系统上使用testingAnonShare.ps1进行测试的确切代码:
$path = 'C:\Users\<REDACTED>\Desktop\Attempt'
$name = 'testinganon'
$description = 'share description'
function Get-Trustee($sid) {
$trustee = ([wmiclass]'Win32_Trustee').CreateInstance()
$trustee.SID = ([wmi]"Win32_SID.SID='$sid'").BinaryRepresentation
return $trustee
}
function New-FullAce($sid) {
$ace = ([wmiclass]'Win32_ACE').CreateInstance()
$ace.AccessMask = 2032127 # full control
$ace.AceFlags = 3 # container inherit + object inherit
$ace.AceType = 0 # access allowed
$ace.Trustee = Get-Trustee $sid
return $ace
}
$sd = ([wmiclass]'Win32_SecurityDescriptor').CreateInstance()
$sd.ControlFlags = 4
$sd.DACL = (New-FullAce 'S-1-1-0'),
(New-FullAce 'S-1-5-7')
$wmi = Get-WmiObject Win32_Share -List
$wmi.Create($path, $name, 0, $null, $description, '', $sd) | Out-Null
net.exe SHARE ShareName=C:\DesiredShareSource /GRANT:"ANONYMOUS LOGON",FULL
but in place"ANONYMOUS LOGON"
must be localized string - it will be used inLookupAccountName
function. however if you grant only ANONYMOUS LOGON" - usual users will no permissions here, so need add everyone too -/GRANT:Everyone,FULL
- RbMmnet SHARE ShareName=C:\DesiredShareSource /GRANT:"ANONYMOUS LOGON",FULL
时,仍然会提示我输入密码。此外,在两个GRANT语句中的逗号之前需要加上“`”。是否有原因导致其他计算机访问共享时仍然提示我输入凭据? - AlwaysQuestioning