我正在尝试使用%USERPROFILE%
解决WScript.Shell
。当我创建一个vbs文件并直接从Windows运行时,我为登录用户C:\Documents and Settings\Administrator
获取了正确的路径,但当我在我的内部使用它时,它会被解析为C:\Documents and Settings\Default User
而不是登录用户在IIS上的本地计算机上运行的经典ASP webapp。
我使用的代码如下
var oShell = new ActiveXObject("Wscript.Shell");
var userPath = oShell.ExpandEnvironmentStrings("%USERPROFILE%");
从网络应用程序检索值时,是否需要检查以获取USERPROFILE
的正确值的权限/设置?
PS:我正在使用javascript代码。
答案 0 :(得分:0)
ASP不知道用户登录的是什么,它在通用的匿名互联网用户帐户下运行。
如果您希望IIS了解当前用户,则必须删除站点目录中匿名用户的权限。这将强制IIS向您的用户显示登录屏幕 登录后,该会话的线程将在登录用户下运行(因此请确保该用户具有权限)。您现在可以使用request.servervariables(“AUTH_USER”)来获取用户名。
埃里克
答案 1 :(得分:0)
选择此站点的Windows身份验证(IIS配置)而不是匿名此类安全性在IIS中称为NTLM,并且使用IE作为浏览器时没有提示,使用标准NTFS权限对文件夹和文件给出权限登录(单点登录),如果使用FF,则每个会话必须登录一次。这里有一个ASP页面,显示服务器端可用的所有变量。如果需要,您可以将这些变量传递给客户端代码,最好不要使用ActiveX进行身份验证(大多数情况下)。
'file servervaraibles.asp
<html>
<%@language=VBScript%>
<%
With Response
.Expires=-1
.Clear
End With
dim teller
response.write "<h1>Servervariables</h1>"
response.write "<table>"
teller = 1
for each subkey in Request.Servervariables
response.write "<tr><td>"
response.write teller
response.write "</td><td>"
response.write (Request.Servervariables.Key(teller))
response.write "</td><td>"
response.write (Request.Servervariables.Item(teller))
response.write "</td></tr>"
teller = teller + 1
next
response.write "</table>"
response.write request.servervariables("path_translated") & "<br>"
response.write "USER cookie:" & Request.Cookies("USER") & "<br>"
response.write "USER Sessionvariable:" & Session("USER") & "<br>"
%>
</html>
答案 2 :(得分:0)
我认为你问的问题的答案是:不。
ASP无法按需加载和卸载用户配置文件,甚至可能假设服务器具有每个用户的配置文件(每个用户必须至少以交互方式登录到服务器一次)。
您可以做的最好是关闭应用程序的匿名访问,以便服务器变量“AUTH_USER”包含该用户唯一的用户名。为可能出现在AUTH_USER中的每个域创建一个公共网络共享(您可能只有一个)。在该网络下创建为每个用户共享一个文件夹,并授予适当的访问权限。
现在,您可以解析AUTH_USER并确定可以加载哪个根路径并将文件保存到当前请求用户。