通过Powershell 5.0中的任务计划程序运行时,从另一个脚本调用的脚本无法正常工作

时间:2019-09-18 03:56:41

标签: powershell scheduled-tasks

我已经删除了脚本,因此它基本上不执行任何操作,但是仍然存在打开错误。我删除了它正在调用的两个脚本。我相信我现在可以正确地给他们打电话,但是这个精简版仍然有问题。我从适用于其他脚本的此命令开始:

Powershell.exe,参数为“-命令C:\ powershell \ scripts \ production \ GetServerObjects.ps1 @Echo%errorlevel%”

这是我的第一篇文章,并且我收到警告,指出我的做法不正确。我会解决的!

通过进程监视器看到的僵尸进程示例如下:open- with

脚本在下面。服务器可能不知道如何打开某些内容,或者出现了一些错误,或者我通过任务计划程序将其启动错误。

#  Get_Server_Objects.ps1
#  Add snapins, modules, dot source needed scripts

. "C:\Powershell\Scripts\Production\invoke-Sqlcmd2.ps1"

if  (-Not (Get-Module -ListAvailable -Name SQLSERVER))
        {
            Import-Module SQLServer
        }  

$ResultsDir ="C:\Powershell\Results"
$DateSuffix = "{0:MMdd}" -f (Get-Date)
$DaysToKeep = 1      #days of results to keep.  This keeps 2 days worth.

# Create a Scripter object and set the required scripting options. 
$scrp = new-object ('Microsoft.SqlServer.Management.Smo.Scripter') ($srv)
$scrp.Options.ExtendedProperties = $True

# Make sure server list is available before proceeding.

try
{
    $Serverlist = get-content "C:\Powershell\Scripts\Production\serversshort.txt" -ea stop
}
catch
{
    $output = $_.ErrorDetails
    throw $output
    Exit 1
}

#  Main Processing Loop
foreach ($Instance in $ServerList) 
{
    $InstDir  = $Instance.replace('\','_')
    if (!(Test-Path "$ResultsDir\$InstDir\"))                            
         {New-Item  "$ResultsDir\$InstDir\" -Type directory}

# create new file names.  Automatically writes over any file of the same name.

        $LoginFile = "$Instdir"+'_'+"$dateSuffix" + '_CreateLogins.txt'
        $DBFile = "$Instdir"+'_'+"$dateSuffix" + '_CreateDBs.txt'
        $JobFile = "$Instdir" +'_' +"$dateSuffix" + '_Createjobs.txt'
        $ConfigFile = "$Instdir" +'_' +"$dateSuffix" + '_config.txt'
        $LinkFile = "$Instdir" +'_' +"$dateSuffix" + '_LinkedServers.txt'
        $DiskFile = "$Instdir" +'_' +"$dateSuffix" + '_DiskLayout.txt'
        $CompFile = "$Instdir" +'_' +"$dateSuffix" + '_CompLevels.txt'

}

1 个答案:

答案 0 :(得分:0)

回顾-更新到Powershell 5.0后,通过任务计划程序运行时,运行另外两个脚本的脚本产生了僵尸进程。

我必须进行两项更改:

  1. 以前,我只是使用脚本名称启动了内部脚本。我以为powershell.exe script.ps1可以工作,但是没有。感谢Lee Dailey建议使用这种格式来启动Powershell的新实例。

    &开始过程“ C:\ Powershell \ Scripts \ Production \ Script.ps1”

  2. 进行上述更改之后,我仍然看到僵尸进程。从脚本中删除几乎所有行之后,我仍然遇到问题。我通常的设置工作的方法是,通过使用以下参数运行Powershell “-命令C:\ powershell \ scripts \ production \ Script.ps1 @Echo%errorlevel%” 不工作。我终于通过使用浏览按钮选择脚本来使其工作。在参数框中,我只输入“ @Echo%errorlevel%”。我认为这是可行的,因为在Powershell 5.0中打开.ps1文件的默认行为是使用Powershell运行它。仍然不知道为什么该脚本无法使用Powershell + Arg技术运行,但现在可以运行。