Как мне убедить powershell (запустить через планировщик задач) найти мой сетевой диск? - PullRequest
3 голосов
/ 30 октября 2010

У меня есть простой скрипт powershell для Windows 7, который не работает должным образом. (это не проблема для XP)

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 :. Если есть какой-то способ решить эту проблему, я смогу скопировать туда файлы ...

Ответы [ 2 ]

6 голосов
/ 02 ноября 2010

Сетевые диски, и в действительности все буквы дисков, в этом отношении, «сопоставлены» с томами для данного сеанса входа.Когда вы создаете запланированное задание для запуска, оно создает новый сеанс входа в систему (даже если вы в данный момент вошли в систему) и запускает запланированное задание в этом контексте.Таким образом, хотя вы можете войти в систему и подключить диск Q - во втором сеансе, где выполняется задача, совершенно другая среда, Windows достаточно хороша для автоматического сопоставления C: (и других физических дисков) для всех сеансов.

Вам не нужно отображать карту диска при использовании PowerShell, кроме как для удобства.В отличие от предшественника cmd.exe, PowerShell совершенно рад изменить текущий каталог на путь в стиле UNC:

cd \\server\share\directory

Возможно ли выполнить то, что вам нужно, вообще не подключая диск?Вы упомянули о копировании файлов - если задача выполняется с вашими учетными данными и предполагается, что у вас есть права доступа к диску Q: (скажем, \ 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
1 голос
/ 04 ноября 2010

Может быть, перед запуском get-psdrive в скрипте, сначала сделайте что-то вроде этого:

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

и после выполнения своей работы (копирование файлов ..):

$net.removenetworkdrive("Q:")
...