我将此函数保存到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"
}
}
谢谢
答案 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()
部分,它就像是一个函数一样。