我试图读取"-Dhttp.port"值没有运气.
您可以在附件中看到,"选项"是一个子键,我可以使用以下代码段读取"选项"(这显示了不必要的PowerShell项目)
Get-ItemProperty $PATH -Name "Options"
Run Code Online (Sandbox Code Playgroud)
现在从多行"选项"我想读取特定子键"-Dhttp.port"的值,这里是80

Get-ItemProperty输出$ PATH -Name"选项"是

我想只读"选项",而从选项键我想读取"-Dhttp.port"的值.
假设我调用Get-Service并希望ID使用cmdlet输出分配一个新列,该输出打印递增的整数,以便:
ID Status Name DisplayName
-- ------ ---- -----------
0 Running AdobeARMservice Adobe Acrobat Update Service
1 Stopped AeLookupSvc Application Experience
2 Stopped ALG Application Layer Gateway Service
Run Code Online (Sandbox Code Playgroud)
我现在正试图Select-Object添加此列,但我不太明白如何在这种表达式中迭代变量.这是我得到的:
Get-Service |
Select-Object @{ Name = "ID" ; Expression= { } }, Status, Name, DisplayName |
Format-Table -Autosize
Run Code Online (Sandbox Code Playgroud)
有没有办法迭代整数Expression= { },或者我是否以错误的方式解决这个问题?
根据回答这样一个和我自己的经验,PowerShell的可以照顾传播-Verbose(和-Debug)自动,这是非常方便的。但是,当我要传播冗长的功能在模块中时,此操作停止。用于测试此代码:
在名为Modc:的目录中创建一个目录,并添加2个文件:
档案c:\Mod\Functions.ps1:
function Show-VerbosityB { [cmdletbinding()]Param()
Write-Output "Show-VerbosityB called"
Write-Verbose "Show-VerbosityB is Verbose"
}
Run Code Online (Sandbox Code Playgroud)
档案c:\Mod\Mod.psd1:
@{
ModuleVersion = '1.0.0.0'
NestedModules = @('Functions.ps1')
FunctionsToExport = @('*-*')
}
Run Code Online (Sandbox Code Playgroud)
现在创建主脚本,说c:\Foo.ps1:
Import-Module c:\Mod
function Show-VerbosityA { [cmdletbinding()]Param()
Write-Output "Show-VerbosityA called"
Write-Verbose "Show-VerbosityA is Verbose"
}
function Show-Verbosity { [cmdletbinding()]Param()
Write-Output "Show-Verbosity called"
Write-Verbose "Show-Verbosity is Verbose"
Write-Output "Testing propagation"
Show-VerbosityA
Show-VerbosityB
}
Show-Verbosity -Verbose
Run Code Online (Sandbox Code Playgroud)
结果是
PS> . C:\Foo.ps1
Show-Verbosity called
VERBOSE: Show-Verbosity is …Run Code Online (Sandbox Code Playgroud) 我正在尝试连接到远程sql数据库,只需在Powershell中运行"select @@ servername"查询.我试图在不使用集成安全性的情况下这样做.我一直在努力使用"get-credential"和"invoke-sqlcmd",但却发现(我认为),你无法将密码从"get-credential"传递给另一个Powershell cmdlet.
这是我正在使用的代码:
add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100
# load assemblies
[Reflection.Assembly]::Load("Microsoft.SqlServer.Smo, `
Version=9.0.242.0, Culture=neutral, `
PublicKeyToken=89845dcd8080cc91")
[Reflection.Assembly]::Load("Microsoft.SqlServer.SqlEnum, `
Version=9.0.242.0, Culture=neutral, `
PublicKeyToken=89845dcd8080cc91")
[Reflection.Assembly]::Load("Microsoft.SqlServer.SmoEnum, `
Version=9.0.242.0, Culture=neutral, `
PublicKeyToken=89845dcd8080cc91")
[Reflection.Assembly]::Load("Microsoft.SqlServer.ConnectionInfo, `
Version=9.0.242.0, Culture=neutral, `PublicKeyToken=89845dcd8080cc91")
# connect to SQL Server
$serverName = "HLSQLSRV03"
$server = New-Object -typeName Microsoft.SqlServer.Management.Smo.Server -argumentList $serverName
# login using SQL authentication
$server.ConnectionContext.LoginSecure=$false;
$credential = Get-Credential
$userName = $credential.UserName -replace("\\","")
$pass = $credential.Password
$server.ConnectionContext.set_Login($userName)
$server.ConnectionContext.set_SecurePassword($credential.Password)
$DB = "Master"
invoke-sqlcmd -query "select @@Servername" -database $DB -serverinstance $servername -username …Run Code Online (Sandbox Code Playgroud) 我对Powershell很新.我有两个不同的脚本,我正在运行,我想组合成一个脚本.
脚本1有1行
Stop-Process -ProcessName alcore.* -force
Run Code Online (Sandbox Code Playgroud)
它的目的是结束任何以"alcore"开头的过程.
脚本2也有1行
Start-Service -displayname crk*
Run Code Online (Sandbox Code Playgroud)
它启动任何以crk开头的服务.
如何将这些组合成一个脚本?如果进程正在运行,我希望阻止它们,如果没有,我希望启动服务.我怎么能做到这一点?
我正在尝试这个,但它不起作用
$services = Get-Process alcore.*
if($services.Count -qe 1){
Stop-Process -ProcessName alcore.* -force
} else {
Start-Service -displayname crk*
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能正确?我还应该将它们包装在函数中并调用函数吗?这似乎有点清洁.谢谢你的帮助.
干杯,
〜ck
试图找出如何转换为HTML多服务检查:
我有这个脚本:
Get-service -Computername SERVER1 -Name *SERVICE1* | ConvertTo-Html -Body "<H2>Service 1 Check</H2> " -Property Name,Status
Get-Service -Computername SERVER2 -name *SERVICE2* | ConvertTo-Html -Body "<br><H2>Service 2 Check</H2> " -Property Name,Status | Out-File c:\servicecheck.htm
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我正在编写一个 powershell cmdlet。从我的 cmdlet BeginProcessing() 方法内部,我希望能够检索调用 cmdlet 时作为默认目录的目录。
示例:如果用户这样做:
cd \myDirectory
invoke-mycmdlet
Run Code Online (Sandbox Code Playgroud)
我想让我的代码知道默认的 shell 目录是 c:\myDirectory。当我访问 Environment.CurrentDirectory 时,它总是 c:\windows\system32
我在 SO 上看到过类似的帖子,其中海报需要使用 get-location 从 shell 内部设置 Environment::Current 目录。那对我不起作用。
基本上,我的 cmdlet 做了一些文件系统的事情,我希望用户能够 cd\ 进入一个目录,并执行我的 cmdlet,它在他们切换到的目录上运行——就像你期望的那样从旧的命令控制台工作。
是否有一个简单的cmdlet我可以在PowerShell中运行,以确定我的Windows机器是通过以太网还是通过无线适配器连接到互联网?我知道您可以在GUI上确定这一点,我只想知道如何在PowerShell中管理它.
我正在尝试通过 powershell 生成 AWS API 网关访问密钥。但是,每次我尝试使用任何 cmdlet 时都会引发错误:
例如:
Get-AWSCredential -ListProfileDetail
Run Code Online (Sandbox Code Playgroud)
会导致这样的错误:
Get-AWSCredential :术语“Get-AWSCredential”不被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。在行:1 char:1 + Get-AWSCredential -ListProfileDetail + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Get-AWSCredential:String) [], CommandNotFoundException +fullyQualifiedErrorId :命令未找到异常
当我通过 Get-Command 显示命令列表时,AWS cmdlet 不会弹出。知道可能是什么问题吗?
我正在查看 PowerShell 的Rename-Itemcmdlet的文档,有一个这样的例子。
Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '\.txt','.log' }
Run Code Online (Sandbox Code Playgroud)
此示例说明如何使用 Replace 运算符重命名多个文件,即使 NewName 参数不接受通配符也是如此。
此命令将当前目录中的所有 .txt 文件重命名为 .log。
该命令使用 Get-ChildItem cmdlet 获取当前文件夹中具有 .txt 文件扩展名的所有文件。然后,它使用管道运算符 (|) 将这些文件发送到 Rename-Item 。
NewName 的值是在将值提交给 NewName 参数之前运行的脚本块。
注意最后一句话:
NewName 的值是在将值提交给 NewName 参数之前运行的脚本块。
实际上NewName是一个字符串:
[-NewName] <String>
Run Code Online (Sandbox Code Playgroud)
那么这是否意味着当所需的参数类型是字符串时,我总是可以使用脚本块?
cmdlets ×10
powershell ×10
aws-lambda ×1
conditional ×1
delay-bind ×1
html ×1
parameters ×1
scriptblock ×1
scripting ×1
shell ×1