代码之家  ›  专栏  ›  技术社区  ›  not-bob

如何说服powershell(通过任务计划程序运行)找到我的网络驱动器?

  •  3
  • not-bob  · 技术社区  · 15 年前

    get-psdrive
    

    当我直接运行它时,我得到

      Name           Used (GB)     Free (GB) Provider      Root
    ----           ---------     --------- --------      ----
    A                                      FileSystem    A:\
    Alias                                  Alias
    C                  12.30         11.60 FileSystem    C:\
    cert                                   Certificate   \
    D                                      FileSystem    D:\
    Env                                    Environment
    Function                               Function
    HKCU                                   Registry      HKEY_CURRENT_USER
    HKLM                                   Registry      HKEY_LOCAL_MACHINE
    **Q                1486.63        289.41 FileSystem    Q:\**
    Variable                               Variable
    WSMan                                  WSMan
    

    当我通过任务调度程序运行这个时,我得到

    Name           Used (GB)     Free (GB) Provider      Root
    ----           ---------     --------- --------      ----
    A                                      FileSystem    A:\
    Alias                                  Alias
    C                  12.30         11.60 FileSystem    C:\
    cert                                   Certificate   \
    D                                      FileSystem    D:\
    Env                                    Environment
    Function                               Function
    HKCU                                   Registry      HKEY_CURRENT_USER
    HKLM                                   Registry      HKEY_LOCAL_MACHINE
    Variable                               Variable
    WSMan                                  WSMan
    

    注意,我错过了我的Q:drive。如果有办法解决的话,我可以把文件复制到那里。。。。

    2 回复  |  直到 15 年前
        1
  •  1
  •   rsc    15 年前

    可能在运行get psdrive in脚本之前,首先执行以下操作:

    $net = new-object -comobject Wscript.Network
    $net.mapnetworkdrive("Q:","\\path\to\share",0,"domain\user","password")
    

    完成工作后(复制文件…):

    $net.removenetworkdrive("Q:")
    
        2
  •  6
  •   Goyuix    15 年前

    网络驱动器,以及与此相关的所有驱动器号,都“映射”到给定登录会话的卷。创建要运行的计划任务时,它将创建新的登录会话(即使您当前已登录),并在该上下文中运行计划任务。因此,虽然您可能已登录并映射了一个Q驱动器—运行任务的第二个会话的环境完全不同,但Windows非常适合为所有会话自动映射C:(和其他物理驱动器)。

    cd \\server\share\directory
    

    完全不映射驱动器就可以完成所需的任务吗?您已经提到了复制文件-如果任务是使用您的凭据运行的,并且假设您对Q:drive(例如\server\share)具有权限,那么您的脚本应该能够执行如下操作:

    copy c:\logs\*.log \\server\share\logs
    

    工作得很好,不需要地图。

    这是我测试的完整命令信息。如果您的环境不同,请注意如何。此任务配置为仅在我登录时作为我的域帐户运行,并为Windows 7/Server 2008 R2配置了最高权限。

    操作是启动程序:

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    

    论据

    -command copy c:\logs\*.log \\server\share\logs
    
        3
  •  0
  •   Gourgandine    6 年前

    • 以足够的权限打开文件夹(例如域用户)
    • 以管理员身份打开powershell并从UNC到本地路径建立符号链接

    • 现在可以直接在powershell脚本中使用UNC路径,它将使用计划任务中提供的凭据打开该路径。

    推荐文章