Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从作为任务运行的powershell 2.0脚本获取错误输出_Powershell_Scheduled Tasks_Powershell 2.0 - Fatal编程技术网

从作为任务运行的powershell 2.0脚本获取错误输出

从作为任务运行的powershell 2.0脚本获取错误输出,powershell,scheduled-tasks,powershell-2.0,Powershell,Scheduled Tasks,Powershell 2.0,TL:实际问题在底部 我正在尝试解决Powershell v1.0脚本问题。该脚本基本上从FTP站点下载一个文件,并通过UNC将其放在远程服务器上,并通过电子邮件通知任务的成功或失败 该脚本作为任务运行,其通用ID为域管理员,但不用于登录系统,因此它运行的服务器不包含它的配置文件 如果我为该用户运行一个runas并通过命令行执行脚本,那么它将完美地工作。但是,如果我尝试将其作为任务运行,它会立即退出。如果我打开runas命令提示符并在命令行中运行计划任务vi,我得到的结果是: 成功:尝试运行计划

TL:实际问题在底部

我正在尝试解决Powershell v1.0脚本问题。该脚本基本上从FTP站点下载一个文件,并通过UNC将其放在远程服务器上,并通过电子邮件通知任务的成功或失败

该脚本作为任务运行,其通用ID为域管理员,但不用于登录系统,因此它运行的服务器不包含它的配置文件

如果我为该用户运行一个runas并通过命令行执行脚本,那么它将完美地工作。但是,如果我尝试将其作为任务运行,它会立即退出。如果我打开runas命令提示符并在命令行中运行计划任务vi,我得到的结果是:

成功:尝试运行计划任务“任务名称”

我曾尝试将变量值写入文本文件以查看发生了什么,但即使在执行的第一步写入变量值时,它也从未写入

我想做的是捕获您在尝试运行脚本和/或将变量信息写入文本文件时通常会看到的任何脚本错误消息

有没有办法做到这一点?顺便说一句,我通过使用以下参数调用powershell来执行以下操作:

-文件-ExecutionPolicy绕过“d:\datscript\myscript.ps1”

什么都没用。我确信我可以修复任何我有的bug,但我正在努力获取一些失败信息

--更新:这里是一个脚本的副本,没有详细信息--

#-------------------------------------------------------------------------------------------------------------------------------------------------------------
#
#变量声明
#
#$path=本地服务器上到downlaod DAT to的路径
#$olddat=旧数据/上次下载的数据
#$currentdat=下一个数据编号
#$ftpsite=McAfee FTP站点。如果路径更改,则更新
#$ftpuser=FTP用户(非登录)
#$ftppass=FTP密码(非登录)
#$tempstring=操纵变量
#$gotdat=如果存在更新的DAT,则为布尔值
#$success=新DAT存在且已下载时的状态(用于电子邮件通知)。
#$thetime=变量使用数据保存一天中的时间操作。
$path=“\\myservername\ftproot\pub\mcafee\datfiles”
$olddat=“”
$currentdat=“”
$ftpsite=”ftp://ftp.nai.com/virusdefs/4.x/"
$ftpuser=“某物”
$ftppass=“任何东西”
$tempstring=“”
$gotdat=“False”
$success=“”
$thetime=“”
#
#规范化函数处理UNC路径
#
函数Get normalizedfilesystems
{

很明显,您在启动Powershell时出错,原因可能是您启动的Powershell版本或帐户的执行策略不同,或者计划的任务存在访问错误。若要收集实际错误,您可以启动如下任务:

cmd /c "powershell.exe -file d:\datscript\myscript.ps1 test.txt 2>&1" >c:\windows\temp\test.log 2&>1
这样,如果启动Powershell时出错,它将记录在
c:\windows\temp\test.log
文件中。如果问题在执行策略中,则可以创建并运行(一次)具有以下内容的任务:

powershell -command "Get-ExecutionPolicy -List | out-file c:/windows/temp/policy.txt; Set-ExecutionPolicy RemoteSigned -Scope LocalMachine -Force"
在您计划运行主任务的帐户下运行任务将首先使策略生效(这样,如果设置机器级策略没有帮助,您将知道要更改的范围),并将机器级策略设置为“RemoteSigned”,这是允许每个脚本之外限制最少的级别(强烈不建议使用,Powershell上编写的编码器脚本可能会破坏您的数据)

希望这有帮助


更新:如果这不是策略,则正确写入任务参数时可能会出现一些错误。您可以这样做:创建一个
.bat
文件,其中包含启动脚本并将输出重定向为
test1.txt
,然后将计划任务更改为
cmd.exe-c launcher.bat>test2.txt
,正确指定正在检查主文件夹。运行任务并查看两个文件,其中至少有一个文件应包含阻止脚本启动的错误。

这真的是powershell 1.0吗,如果是,原因是什么?powershell 2.0甚至在Windows 2003/XP上运行。如果不确定,请检查
$PSVersionTable
的值。您有可以显示的脚本吗us?V3及更高版本中的ScheduledJob命令通过允许您创建按计划运行的作业来解决此问题。与常规PowerShell作业一样,您可以稍后返回并请求任何脚本输出,包括错误。很抱歉,看起来是版本2.0。名称值-----CLRVISI在2.0.50727.5466构建版本6.1.7601.17514 PSVersion 2.0 WSManStackVersion 2.0 PSCompatibleVersions{1.0,2.0}SerializationVersion 1.1.0.1 PSRemotingProtocolVersion 2.1Is
D:
a映射的网络驱动器?感谢您提供的信息。第一步不起作用。第二步返回。MachinePolicy未定义UserPolicy未定义处理未定义的CurrentUser未定义的LocalMachine不受限制如果我尝试更改它,我将获取设置执行策略:访问注册表项“HKEY\U LOCAL\U MACHINE\SOFTWARE\M”Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell'被拒绝。第1行字符:20+设置执行策略“无限制”?那么,这不应该是策略情况。运行第二个任务的用户是什么?另外,您是否检查了第一步中的日志文件是否包含任何数据?我使用的是我们基础架构部门专门为在各种服务器上运行任务而设置的AD帐户。该帐户是域管理员、域用户和entrep的成员rise Admins.Nice。您是否看到解析器在
$path
处大叫?请将该行中的双引号替换为单引号。
cmd /c "powershell.exe -file d:\datscript\myscript.ps1 test.txt 2>&1" >c:\windows\temp\test.log 2&>1
powershell -command "Get-ExecutionPolicy -List | out-file c:/windows/temp/policy.txt; Set-ExecutionPolicy RemoteSigned -Scope LocalMachine -Force"