PowerShell 测试路径 UNC 访问仅通过计划任务被拒绝
PowerShell Test-Path UNC Access Denied only via Scheduled Task
PowerShell 3
Windows 2012
主要次要版本修订
3 0 -1 -1
我有几个 PowerShell 脚本在过去几年中一直在使用。
现在他们似乎无法通过计划任务 运行 成功。
如果我在 Task Scheduler 之外手动 运行 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
计划任务:
我通过添加 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
PowerShell 3
Windows 2012
主要次要版本修订
3 0 -1 -1
我有几个 PowerShell 脚本在过去几年中一直在使用。
现在他们似乎无法通过计划任务 运行 成功。
如果我在 Task Scheduler 之外手动 运行 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
计划任务:
我通过添加 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