PowerShell Test-Path UNC Доступ запрещен только через запланированное задание - PullRequest
0 голосов
/ 10 апреля 2019

PowerShell 3

Windows 2012

Major Minor Build Revision


3 0 -1 -1

У меня есть несколько скриптов PowerShell, которые работали последние несколько лет.

Теперь они не могут успешно выполняться с помощью запланированной задачи.

Если я вручную запускаю сценарий PowerShell вне планировщика задач, он работает.

Сценарий просто создает новую папку по пути UNC.

Получается ошибка «Отказано в доступе» при попытке «Test-Path».

Похоже, что это будет проблема с разрешениями, однако, он работает, используя тот же логин и просто дважды щелкнув скрипт.

Запланированная задача настроена на использование тех же учетных данных, с которыми я вошел на сервер, когда запускаю сценарий вручную.

Я создал новую Базовую задачу в Планировщике, и она все еще не работает.

Я сократил код до базового тестового пути и создал папку, но все еще не работает.

Я создаю командный файл для чтения и создаю папку в каталоге, настраиваю его для запуска через запланированное задание, и он работает.

Ошибка вывода:

C:\Scripts>c:

C:\Scripts>cd\scripts

C:\Scripts>powershell.exe c:\scripts\makefolder.ps1 

Creating New Folders...


Test-Path Result with SilentlyContinue... Does the folder exist already?

False

The folder is:  \\intranet.mycompany.com\dept\finance\Shared Documents\Sales Commissions\MyTest



test-path : Access is denied
At C:\scripts\makefolder.ps1:23 char:6
+     IF (test-path -path $today_folder)
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: 
(\\intranet.myco...missions\My 
Test:String) [Test-Path], UnauthorizedAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.Powe 
rShell.Commands.TestPathCommand

New-Item : Access is denied
At C:\scripts\makefolder.ps1:28 char:11
+             {New-Item -ItemType Directory -Path $today_folder
+              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : PermissionDenied: (\\intranet.myco...missions\My 
   Test:String) [New-Item], UnauthorizedAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.Powe 
rShell.Commands.NewItemCommand

Пакетный файл, который выполняет запланированное задание. Это просто запускает скрипт PowerShell. Я также удалил этот пакетный файл, и запланированное задание сразу запустило PowerShell с такими же результатами:

c:
cd\scripts
powershell.exe c:\scripts\makefolder.ps1

Вот сценарий PowerShell:

Write-Host 'Creating New Folders...
' -fore black -back yellow



$today_folder = "\\intranet.mycompany.com\dept\finance\Shared Documents\Sales Commissions\MyTest"


Write-Host 'Test-Path Result with SilentlyContinue... Does the folder exist already?
' -fore black -back yellow

test-path -path $today_folder -ErrorAction SilentlyContinue


write-host 'The folder is: ' $today_folder
write-host '

'


    IF (test-path -path $today_folder) 
        #Folder Already Exist
            { Write-Host $today_folder ":Already Exist, moving on..." -fore black -back green }
        ELSE
        #Create the Folder 
            {New-Item -ItemType Directory -Path $today_folder  
                    Write-Host $today_folder ":Created" -fore black -back yellow}



#To see the console window
sleep 5

#Read-Host -Prompt "Press Enter to exit"

Если я выполняю подобную функцию, просто используя пакетный файл, она работает:

@echo off
 echo Hello this a test batch file
 pause
net use L: "\\intranet.mycompany.com\dept\finance\Shared Documents\Sales Commissions"
 dir L:
 pause

mkdir L:\M2019

pause

net use L: /delete

echo all done
pause

Запланированное задание: enter image description here

enter image description here

1 Ответ

0 голосов
/ 11 апреля 2019

Я заставил его работать, добавив NET USE и указав учетные данные в скрипте PowerShell.

Спасибо @AdminOfThings, по крайней мере, за то, что я заставил меня думать иначе.

Понятия не имею, почемуэто только начало происходить.Я тоже не понимаю, почему только у Task Scheduler была проблема с разрешениями.Я использовал те же учетные данные, с которыми я вошел в систему, те же, что создавали задачи, и те же данные, которые хранились в каждой задаче.

$user = 'corp\crazyuser'
$passwd = 'myPassword'

$today_folder = "\\intranet.mycompany.com\dept\finance\Shared Documents\Sales Commissions"


$subfolder = "TestFolder"


$complete_folder = $today_folder + '\' + $subfolder

#open path
NET USE $today_folder /user:$user $passwd 


    IF (test-path -path $complete_folder) 
        #Folder Already Exist
            { Write-Host $complete_folder ":Already Exist, moving on..." -fore black -back green }
        ELSE
        #Create the Folder 
            {New-Item -ItemType Directory -Path $complete_folder
                    Write-Host $complete_folder ":Created" -fore black -back yellow}

write-host '
Closing NET UNC path
'
NET USE /DELETE  $today_folder

...