Powershell“Start-Service”cmdlet无法正常工作。不向主机写任何东西

时间:2018-02-23 23:56:58

标签: powershell

我将此函数保存到StartWindowsService.ps1文件中。 我确保executionpolicy是'Unrestricted'。我按以下方式运行此文件:

在我运行下一行之前,我从服务中停止了'FAService'。这样我的功能就会启动服务。

我在Powershell命令提示符下运行以下行。它不会写入任何东西,也不会启动FASservice。我真的很蠢。

C:\LocationofthisFile\ .\StartWindowsService.ps1 StartWindowsService FAService

我也试过

 function StartWindowsService{
          Param([string] $ServiceName)
          $aService = Get-Service -Name $ServiceName
          if ($aService.Status -ne "Running"){
              Start-Service $ServiceName
              Write-Host "Starting " $ServiceName " service" 
              " ---------------------- " 
              " Service is now started"
           }

          if ($aService.Status -eq "running"){ 
                 Write-Host "$ServiceName service is already started"
           }
     }

谢谢

1 个答案:

答案 0 :(得分:2)

如果您在脚本中只有一个函数,那么当您运行脚本时,它将启动一个新的PowerShell范围,定义该函数,因为这是所有脚本所做的,然后退出并清除它。您作为参数传递的其他内容(函数名称,服务名称)都没有,因为脚本不会查找它们。只有函数可以,而你没有调用函数。

前进的方法是dot source脚本. .\thing.ps1,其开头有一个点和一个空格。或许Import-Module .\thing.ps1。这些将定义函数并将其保留在当前范围内,因此您可以在shell中调用它:

c:\path\ > . .\StartWindowsService.ps1
c:\path\ > StartWindowsService FAService

另一种方法是通过删除定义使脚本成为函数:

Param([string] $ServiceName)
$aService = Get-Service -Name $ServiceName

然后您可以直接从文件中使用它

c:\path\ > .\StartWindowsService.ps1 FAService

并且参数转到脚本Param()部分,它就像是一个函数一样。