很抱歉,如果这是一个基本问题,我是PS初学者...为什么以下Powershell函数运行正常并在我将其添加到$ Profile时将输出写入控制台,但是当它没有产生任何输出时我把它作为.ps1运行? (当我作为脚本运行时,它似乎运行但不返回任何输出或错误。
我的执行政策=不受限制,我以管理员身份运行。想法?
function Get-NetStats
{
$properties = 'Protocol','LocalAddress','LocalPort'
$properties += 'RemoteAddress','RemotePort','State','ProcessName','PID'
netstat -ano | Select-String -Pattern '\s+(TCP|UDP)' | ForEach-Object {
$item = $_.line.split(" ",[System.StringSplitOptions]::RemoveEmptyEntries)
if($item[1] -notmatch '^\[::')
{
if (($la = $item[1] -as [ipaddress]).AddressFamily -eq 'InterNetworkV6')
{
$localAddress = $la.IPAddressToString
$localPort = $item[1].split('\]:')[-1]
}
else
{
$localAddress = $item[1].split(':')[0]
$localPort = $item[1].split(':')[-1]
}
if (($ra = $item[2] -as [ipaddress]).AddressFamily -eq 'InterNetworkV6')
{
$remoteAddress = $ra.IPAddressToString
$remotePort = $item[2].split('\]:')[-1]
}
else
{
$remoteAddress = $item[2].split(':')[0]
$remotePort = $item[2].split(':')[-1]
}
New-Object PSObject -Property @{
PID = $item[-1]
ProcessName = (Get-Process -Id $item[-1] -ErrorAction SilentlyContinue).Name
Protocol = $item[0]
LocalAddress = $localAddress
LocalPort = $localPort
RemoteAddress =$remoteAddress
RemotePort = $remotePort
State = if($item[0] -eq 'tcp') {$item[3]} else {$null}
} | Select-Object -Property $properties
}
}
}
答案 0 :(得分:1)
TessellatingHeckler说得对,虽然可能不是那么清楚,也许比我更加讽刺,我已经说过了:
简单地说,你的.ps1 定义了函数Get-NetStats但它没有调用函数。如果没有调用函数,你将无法获得任何输出。
运行.ps1后 - 或者,如果函数定义在您的配置文件中 - 将定义该函数,只需输入 Get-NetStats <,即可在PowerShell会话中随时调用该函数/强>
答案 1 :(得分:0)
您确定不需要在脚本中输出返回结果吗?在PowerShell窗口中运行$ Profile中的函数时,结果将返回到该窗口。在脚本中情况并非如此。
在脚本中尝试:
$result = Get-NetStats
$result
答案 2 :(得分:0)
我找到了一个程序,帮助我解决这个问题。它位于:
In PowerShell, how do I define a function in a file and call it from the PowerShell commandline?
现在,我需要弄清楚如何将我的新功能部署到远程主机,可能是通过GPO或其他PowerShell脚本......
干杯!
答案 3 :(得分:0)
为了在运行.ps1
文件时查看位于.ps1
文件中的函数的输出,您需要在脚本中添加函数调用。
例如,假设我创建了以下文件:Do-AlmostNothing.ps1
# Do-AlmostNothing.ps1
# define the function doNotSoMuch
function doNotSoMuch {
Write-Host "Look how little I've accomplished!"
}
# execute the function defined above
doNotSoMuch
如果没有调用该函数,则不会发生任何事情。
执行脚本:
PS> ./Do-AlmostNothing.ps1
Look how little I've accomplished!
PS>
答案 4 :(得分:0)
您可以尝试这样的
$myStaff = Get-NetStats
Write-output "$myStaff"