标签: cmdlets

如何在PowerShell中读取多行多字符串注册表项?

我试图读取"-Dhttp.port"值没有运气.

您可以在附件中看到,"选项"是一个子键,我可以使用以下代码段读取"选项"(这显示了不必要的PowerShell项目)

Get-ItemProperty $PATH -Name "Options"    
Run Code Online (Sandbox Code Playgroud)

现在从多行"选项"我想读取特定子键"-Dhttp.port"的值,这里是80

在此输入图像描述

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

在此输入图像描述

我想只读"选项",而从选项键我想读取"-Dhttp.port"的值.

powershell cmdlets

3
推荐指数
1
解决办法
3338
查看次数

如何向cmdlet输出添加一列递增值?

假设我调用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 cmdlets

3
推荐指数
1
解决办法
4404
查看次数

如何传播-详细到模块功能?

根据回答这样一个和我自己的经验,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)

powershell cmdlets

3
推荐指数
1
解决办法
932
查看次数

将用户名和密码传递给get-credential或运行sql查询而不使用Powershell中的invoke-sqlcmd

我正在尝试连接到远程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 cmdlets sql-server-2008

2
推荐指数
1
解决办法
1万
查看次数

Powershell帮助,如果进程存在,停止它,否则启动服务?

我对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

shell powershell cmdlets scripting conditional

2
推荐指数
1
解决办法
1万
查看次数

在Powershell中将多个输出发送到同一HTML文件

试图找出如何转换为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)

这可能吗?

html powershell cmdlets

2
推荐指数
1
解决办法
2万
查看次数

Powershell:从 cmdlet 中获取默认目录

我正在编写一个 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,它在他们切换到的目录上运行——就像你期望的那样从旧的命令控制台工作。

powershell cmdlets

2
推荐指数
1
解决办法
342
查看次数

使用Powershell确定Internet连接

是否有一个简单的cmdlet我可以在PowerShell中运行,以确定我的Windows机器是通过以太网还是通过无线适配器连接到互联网?我知道您可以在GUI上确定这一点,我只想知道如何在PowerShell中管理它.

powershell cmdlets

2
推荐指数
2
解决办法
6343
查看次数

使用 cmdlet 访问 AWS IAM 时出现 ObjectNotFound 错误

我正在尝试通过 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 cmdlets amazon-web-services aws-lambda

2
推荐指数
1
解决办法
5266
查看次数

对于 PowerShell 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)

那么这是否意味着当所需的参数类型是字符串时,我总是可以使用脚本块?

parameters powershell cmdlets scriptblock delay-bind

2
推荐指数
2
解决办法
1127
查看次数