Я создал сценарий запуска GPO для выполнения на компьютерах в определенном контейнере AD. Сценарий берет файл из общей папки AD netlogon и помещает его в каталог на компьютере. При наличии необходимых разрешений (например, я) могу нормально выполнить скрипт и скопировать файл. Но при запуске не работает - файл не копируется с сервера AD.
Сценарий запуска должен работать как локальная система (я прав?). Возникает вопрос, почему файлы не копируются при запуске? Может быть, из-за:
На моей тестовой машине есть ключ реестра и локальные каталоги, как описано в сценарии. У меня самого есть стандартные права пользователя на тестовой машине. Сервер AD - это Windows 2008, тестовый клиент - Windows XP SP3 (и скоро будет Windows 7, и я предполагаю, что проблемы с разрешениями будут неизбежны)
Dim wShell, fso, oraHome, tnsHome, key, srcDir
Set wShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
key = "HKLM\Software\Oracle\Oracle_Home"
On Error Resume Next
orahome = wShell.RegRead(key)
If err.Number = 0 Then
tnsHome = oraHome + "\" + "network\admin\"
srcDir = wShell.ExpandEnvironmentStrings("%logonserver%") + "\netlogon\UpdatedFiles\"
fso.CopyFile srcDir + "file1.ext", tnsHome, true
End If
Боковое примечание: чтобы убедиться, что сценарий правильно развернут, я намеренно внес в сценарий некоторые ошибки, и при следующем запуске появилось сообщение об ошибке. Итак, я знаю, что объект групповой политики развернут правильно.
Хммм ... То, что вы делаете, должно работать. Я знаю, что это не слишком утешительно, но я использую МНОГО сценариев запуска (тысячи вызовов клиентских компьютеров на сайтах моих клиентов каждый день), и у меня нет проблем с надежностью выполнения сценариев.
Я бы добавил «On Error Goto 0» после чтения реестра, чтобы сообщалось о любых других ошибках при выполнении скрипта. Я бы также рассмотрел, по крайней мере, для тестирования, добавление некоторых вызовов MsgBox для отчета о значениях, которые вы создали для вызова fso.CopyFile. В основном отлаживайте его с помощью операторов «PRINT».
Не то чтобы это было полезно, но вот как я бы сделал это с командным файлом:
@echo off
for /f "usebackq tokens=2*" %%i in (`reg query HKLM\Software\Oracle /v Oracle_Home ^| find /i "Oracle_Home"`) do (
if not "%%j"=="" copy /y "\\%USERDOMAIN%\netlogon\UpdatedFiles\some_file.tns" "%%j"
)
Кстати: у вас не должно быть проблем с разрешениями при запуске сценария запуска под Windows 7. Сценарий будет работать как СИСТЕМА, и UAC не будет включен. Microsoft поняла это правильно.
При запуске под локальной системной учетной записью сценарий будет подключаться к сети с использованием учетной записи компьютера AD (то есть COMPUTERNAME $).
Однако переменная% logonserver% может быть недопустимой в контексте системной учетной записи - в конце концов, локальная системная учетная запись аутентифицируется на локальном компьютере, а не в домене. Переменная% logonserver% может быть пустой или соответствовать имени локального компьютера.
попробуйте использовать \\domain.name\NETLOGON
вместо. Он будет подключен к контроллеру домена (и поскольку общий ресурс NETLOGON содержит одни и те же файлы на всех контроллерах домена, потому что он использует FRS, не имеет значения, с каким контроллером домена вы разговариваете.