无法正确解析用户环境变量

时间:2012-08-28 08:36:26

标签: asp-classic environment-variables user-profile wsh

我正在尝试使用%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代码。

3 个答案:

答案 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并确定可以加载哪个根路径并将文件保存到当前请求用户。