我有一个诊断性Powershell脚本,希望服务器管理员将其与以下用户流一起使用:
在以下情况下,我还希望有一个诊断选项来运行:
这是简化示例
Inspect-ProductionHost.ps1
!SESSION 2018-11-30 14:41:07.845 -----------------------------------------------
eclipse.buildId=4.9.0.I20180906-0745
java.version=11.0.1
java.vendor=Oracle Corporation
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_GB
Framework arguments: -product org.eclipse.epp.package.java.product -keyring /Users/izziharper/.eclipse_keyring
Command-line arguments: -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.java.product -keyring /Users/izziharper/.eclipse_keyring
!ENTRY org.eclipse.mylyn.bugzilla.core 4 0 2018-11-30 14:41:08.591
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: Could not resolve module: org.eclipse.mylyn.bugzilla.core [278]
Unresolved requirement: Require-Bundle: org.apache.xmlrpc
-> Bundle-SymbolicName: org.apache.xmlrpc; bundle-version="3.0.0.v20100427-1100"
org.apache.xmlrpc [68]
Unresolved requirement: Import-Package: javax.xml.bind
Unresolved requirement: Require-Bundle: org.eclipse.mylyn.commons.xmlrpc; bundle-version="[3.8.0,4.0.0)"
-> Bundle-SymbolicName: org.eclipse.mylyn.commons.xmlrpc; bundle-version="3.24.2.v20180904-2231"; singleton:="true"
org.eclipse.mylyn.commons.xmlrpc [295]
Unresolved requirement: Require-Bundle: org.apache.xmlrpc; bundle-version="[3.0.0,4.0.0)"
-> Bundle-SymbolicName: org.apache.xmlrpc; bundle-version="3.0.0.v20100427-1100"
问题在于,当我从命令行function Inspect-ProductionHost()
{
param ([switch]$DoDebug)
if($DoDebug -eq $True)
{
Get-DebugData
Write-output $DebugData
}
write-output "Testing Server"
TestHost-Configuration1
}
cls #clear the output incase this is pasted in. Simplify diagnostics
Inspect-ProductionHost($DoDebug)
执行此操作时,参数不会流到函数。
替代解释
我想通过以下方式运行脚本:
.\Inspect-ProductionHost -DoDebug
中,它无需$ DebugData即可运行Inspect-ProductionHost
-或-
Inspect-ProductionHost -DoDebug
运行脚本.\Inspect-ProductionHost
运行脚本这在Powershell中可以实现吗?
答案 0 :(得分:0)
这个...
Inspect-ProductionHost($ DoDebug)
...不是您要使用的开关。您以后显示的选项是。
。\ Inspect-ProductionHost -DoDebug
此外,对于开关,他们以这种方式使用它...
if($ DoDebug -eq $ True)
...并不是真正需要的。可能就是这个...
if($ DoDebug)
至于... “•Sysadmin将脚本粘贴到RDP / Remote Desktop窗口中。它立即执行”。
除非将其粘贴到PowerShell ConsoleHost实例中,否则必须在登录到RDP目标后启动该实例,否则不会发生。
通过这种努力,您只需将原始代码粘贴到ConsoleHost中,并在按下Enter键时运行它。粘贴代码,不运行代码。仍然需要交互式键盘操作。
您确实应该将脚本复制到RDP位置,并要求管理员从PowerShell主机运行该脚本,而不是复制粘贴。 这样,您可以使用您要使用的调试开关运行该调试开关。
在此复制粘贴工作中(仍然需要交互步骤),要使调试发生,您应该使参数成为具有布尔选项的必需项。
所以,这是您的第二个选择
3。从命令行运行脚本。\ Inspect-ProductionHost 4.从命令行运行脚本。\ Inspect-ProductionHost -DoDebug
...这是最谨慎的方法。
以其他方式,除非登录到RDP目标时具有PowerShell控制台主机自动启动,否则必须手动启动它并手动运行代码。
另一种选择是将脚本复制到RDP目标,使用登录脚本将其触发,并让您脚本提示进行调试运行(即布尔响应)。
function Inspect-ProductionHost()
{
param ([switch]$DoDebug)
if($DoDebug -eq $True)
{
Get-DebugData
Write-output $DebugData
}
write-output "Testing Server"
Test-Connection -ComputerName $env:COMPUTERNAME
}
Inspect-ProductionHost
Testing Server
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
Inspect-ProductionHost($DoDebug)
Testing Server
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
Inspect-ProductionHost -DoDebug
Get-DebugData : The term 'Get-DebugData' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At line:7 char:9
+ Get-DebugData
+ ~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-DebugData:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Testing Server
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
function Inspect-ProductionHost()
{
param ([switch]$DoDebug)
if($DoDebug)
{
Get-DebugData
Write-output $DebugData
}
write-output "Testing Server"
Test-Connection -ComputerName $env:COMPUTERNAME
}
Inspect-ProductionHost
Testing Server
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
Inspect-ProductionHost($DoDebug)
Testing Server
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
Inspect-ProductionHost -DoDebug
Get-DebugData : The term 'Get-DebugData' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At line:7 char:5
+ Get-DebugData
+ ~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-DebugData:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Testing Server
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0.... fe80::b812:f23d:94b3:33e9%4 32 0
如果您确实想执行此复制粘贴操作,这又是一件很奇怪的事情,那么这不必是一个函数。只需将以下内容复制并粘贴到consolehost中即可。
param
(
[Parameter(Mandatory=$true)]
[ValidateSet('True','False')]
[string]$DoDebug
)
if($DoDebug -eq 'True')
{
Get-DebugData
Write-output $DebugData
}
write-output "Testing Server"
Test-Connection -ComputerName $env:COMPUTERNAME
cmdlet at command pipeline position 1
Supply values for the following parameters:
DoDebug: false
Testing Server
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
WS01 WS01 10.0.0... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0... fe80::b812:f23d:94b3:33e9%4 32 0
param
(
[Parameter(Mandatory=$true)]
[ValidateSet('True','False')]
[string]$DoDebug
)
if($DoDebug -eq 'True')
{
Get-DebugData
Write-output $DebugData
}
write-output "Testing Server"
Test-Connection -ComputerName $env:COMPUTERNAME
cmdlet at command pipeline position 1
Supply values for the following parameters:
DoDebug: true
Get-DebugData : The term 'Get-DebugData' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At line:10 char:5
+ Get-DebugData
+ ~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-DebugData:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Testing Server
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
WS01 WS01 10.0.0... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0... fe80::b812:f23d:94b3:33e9%4 32 0
WS01 WS01 10.0.0... fe80::b812:f23d:94b3:33e9%4 32 0