我在下面创建了脚本,以检查应用程序的端口2025并记录连接数。
我需要此脚本作为名称为netstat_2025
的Windows上的服务运行。有人知道这种可能性吗?
我不想使用任务计划程序,而是在Windows上将脚本作为服务运行。
$startTime = (Get-Date).ToString("dd_MM_yyyy")
$LogDate = ((get-date).ToLocalTime()).ToString("yyyy-MM-ddTHH:mm:ss.fff")
$hostname = hostname
$portTServer = 2025
$FileTserver = netstat -ano | findstr "2025"
$LogTserver = $LogDate + " - Quantidade de Conexoes na porta " + $portTServer + ": " +
$FileTserver.count + " - Servidor: " + $hostname
$LogTserver | Out-File -Append D:\scripts\netstat_$startTime.log
答案 0 :(得分:1)
使用New-Service
创建新服务。这是sc create
外部命令的PowerShell本地等效项。在您的情况下,您需要将脚本保存到文件中,然后可以将其配置为通过powershell.exe
作为服务运行。至少需要提供服务名称以及要运行的命令:
$pathToServiceScript = 'C:\Path\To\Service-Script.ps1'
New-Service -Name netstat_2025 -BinaryPathName "powershell.exe -f ""$pathToServiceScript"""
-Name
将成为服务的名称。如果您想在services.msc
中使用更友好的显示名称,还可以提供-DisplayName
参数。
-BinaryPathName
将成为启动服务时要运行的可执行文件,以及需要传递的所有参数。在这种情况下,我们要运行powershell.exe
并执行特定的脚本。我们使用双引号,因此我们可以使用$pathToServiceScript
变量,并在路径中有空格的情况下将其用双引号引起来。
如果要控制服务的启动行为,还可以使用-StartupType
参数。默认情况下,服务创建为Automatic
服务,但您可以指定以下任何启动类型:
Boot
:指示该服务是由系统加载程序启动的设备驱动程序。此值仅对设备驱动程序有效。 已在PowerShell 6中删除。 System
:指示该服务是由“ IOInitSystem()”功能启动的设备驱动程序。此值仅对设备驱动程序有效。 已在PowerShell 6中删除。 Automatic
:默认。在系统启动时,服务已启动或已由操作系统启动。如果自动启动的服务依赖于手动启动的服务,则手动启动的服务也会在系统启动时自动启动。AutomaticDelayedStart
:在系统启动后不久开始。Manual
:仅由用户,使用服务控制管理器或应用程序手动启动服务。Disabled
:服务已禁用,不能由用户或应用程序启动。InvalidValue
:不支持该值。使用此值将导致错误。 在PowerShell 6之前不存在。 答案 1 :(得分:1)