标签: powershell-core

重复的 HelpFiles (about_) 阻止 Get-Help 显示信息。如何解决?

问题:我有两个about_psreadline帮助主题:about_psreadlineabout_PSReadLineGet-Help cmdlet 无法显示其中任何一个的信息。Get-Help about_psreadline只显示一个包含两个提到的帮助文件的表格。

问题:如何处理重复的帮助文件?可以/应该删除其中之一吗?

Powershell 版本:6.1.3;我还检查了PSModulePath并且包含PSReadline的唯一路径是C:\program files\powershell\6\Modules

在此处输入图片说明

windows powershell powershell-core

4
推荐指数
1
解决办法
198
查看次数

如何使用函数身份验证或 Azure AD 服务主体对 Azure 函数进行身份验证

我有一个 Azure 函数,用于从 Azure AD 获取数据,但我想限制谁可以使用该函数,因为它将使用 HTTP 触发器,以便我稍后能够从逻辑应用程序调用该函数沿着路。因此,由于 HTTP 触发的 Azure Functions 具有公共终结点,我希望通过将授权级别设置为 Function 来提高安全性,或者更优选使用 Azure AD 服务主体(预先创建)。进行此更改后,我可以通过将函数放入 URL 来进行调用。

基本网址: https://something.com/api/function_name

带有令牌的 URL: https://something.com/api/function_name?code=token_here

但是,我的函数需要提供一些输入。在匿名端点上,您可以像这样扩展基本 URL: https://something.com/api/function_name/?parameter=value

其中参数是代码所期望的,以及传递到代码中变量的值。现在我对 HTTP 端点以及通过 URL 传递值不太熟悉。我知道这是作为 JSON 传递的(可能)

但我不明白如何既进行函数授权又传递参数。我试过了:

https://something.com/api/function_name/?parameter=value?code=token_here
https://something.com/api/function_name?code=token_here/?parameter=value
Run Code Online (Sandbox Code Playgroud)

有谁知道这应该如何运作?

另一方面,我还可以将其设置Platform Features -> Authentication / Authorization为 Azure AD 服务主体。但是,如何更改 URL 以使用该服务主体进行身份验证client_idclient_secret?我实际上更喜欢使用这种方法,因为这样我就可以对令牌实施生命周期管理并轮换它以使其更加安全。

我在这里查看: 使用 JavaScript 进行 Azure AD 身份验证访问的 Azure 函数

我在 stackoverflow 上找到的大多数其他主题甚至都没有接近。

PS:这个PS不需要答案,但我会很感激任何想法。我正在炮制的这个东西是一个由(预定的)逻辑应用程序组合而成的工作流程,该应用程序触发Get-Function. 哪里Get-Function需要以某种方式触发Update-Function. 我正在触发Get-FunctionHTTP,以便我也能够将其作为 API …

authentication powershell service-principal azure-functions powershell-core

4
推荐指数
1
解决办法
7243
查看次数

如何更改 PowerShell 提示颜色?

我经常发现自己迷失在过多看起来相同的台词中。我很难从之前命令的输出中分辨出最近命令的输出的开头。

因此,我想将 PowerShell 提示符的颜色从黑色背景上的白色文本永久更改为其他颜色。我怎样才能做到这一点?

从我的角度来看,提示由两部分组成:

  1. 小路
  2. 命令

如何更改两者中任何一个的颜色,但不更改命令的输出颜色?

或者,我也非常希望看到路径部分带有下划线。这也有助于在其他输出行中查找我以前的命令,以便查看相应的其他输出从哪里开始。这可能吗?


编辑

一些评论要求对我的问题进行一些详细说明,因此这里有两张描述实际/预期情况的屏幕截图(注意红线):

实际的

在此输入图像描述

预期的

在此输入图像描述


我想为 PowerShell 5.x 和 Core 获取这个。

那么,您认为这更像是一个功能请求,而不是对现有功能的查询吗?

powershell powershell-5.0 powershell-core

4
推荐指数
1
解决办法
7210
查看次数

作为命令调用时,ScriptProperty 无法访问脚本的 cmdlet

给定代码,例如此 MRE:

function Get-One {1}
Update-TypeData -TypeName 'Demo' -MemberType 'ScriptProperty' -MemberName 'Test1' -Value {Get-Date}
Update-TypeData -TypeName 'Demo' -MemberType 'ScriptProperty' -MemberName 'Test2' -Value {Get-One}
$example = [PSCustomObject]@{PSTypeName = 'Demo'}
$example
Run Code Online (Sandbox Code Playgroud)

如果我调用它,pwsh -File '.\Demo.ps1'那么一切都会按您的预期工作/我得到以下输出:

Test1               Test2
-----               -----
2021-04-17 21:35:55     1
Run Code Online (Sandbox Code Playgroud)

但是,如果我调用相同的命令来pwsh -Command '.\Demo.ps1'获取此命令(即 Test2 为空白);虽然我希望得到与上述相同的结果:

Test1               Test2
-----               -----
2021-04-17 21:35:55     
Run Code Online (Sandbox Code Playgroud)

即当我通过-Command参数调用时,ScriptProperty 无法访问脚本本身定义的 cmdlet/函数;虽然可以访问标准的(例如Get-Date)。

我认为这是一个错误;在 PWSH 和 PowerShell 中似乎只有相同的行为;这使得这种可能性小一点。

这是一个错误吗?或者我在理解中遗漏了什么。

powershell powershell-core powershell-5.1

4
推荐指数
1
解决办法
44
查看次数

正在获取主目录?

我正在尝试从脚本的用户主目录中获取目录。这是我正在尝试的方法,但是该~变量作为文字而不是扩展到主目录。无论如何,有没有使其扩展?如果没有,我可以通过其他方式获取主目录吗?

$mySourceDir = "~/Projects/svn/myProject/trunk" # Single quote also does not expand
cd $mySourceDir
Run Code Online (Sandbox Code Playgroud)

这是在OSX上使用PS 6 beta。

macos powershell powershell-core

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

导入凭据时,Import-Clixml 中是否有任何隐式假设?

我想知道我是否采取了任何可能导致代码故障的隐含假设?

我想避免使用 Import-Clixml cmdlet 是有原因的吗?因此,我开发了一种替代方案,即一系列命令,旨在从使用 Export-Clixml 创建的 CliXml 文件中提取用户名和密码。它现在可以工作,但我不确定分割解决方案是否可靠。

$credFileUriBld = [UriBuilder]::New('file','localhost',-1,"MyCredentials.xml")) 

$credFile = [Xml.XMLDocument]::New()

$nsMgr4ps1xml = [Xml.XmlNamespaceManager]::New($credFile.NameTable)
$nsMgr4ps1xml.AddNamespace('ps1xml','http://schemas.microsoft.com/powershell/2004/04')
$credFile.Load($credFileUriBld.Path)

$netCredInfo = [System.Net.NetworkCredential]::New($credFile.SelectSingleNode('/ps1xml:Objs/ps1xml:Obj/ps1xml:Props/ps1xml:S[@N=''UserName'']/text()',$nsMgr4ps1xml).Get_Value(),
                                                   ($credFile.SelectSingleNode('/ps1xml:Objs/ps1xml:Obj/ps1xml:Props/ps1xml:SS[@N=''Password'']/text()',$nsMgr4ps1xml).Get_Value().Split('00') | 
                                                    ForEach-Object { if([String]::IsNullOrEmpty($_)) { } else { $_.Trim() } } |
                                                    ForEach-Object { [convert]::ToInt32($_,16) } |
                                                    ForEach-Object { [convert]::ToChar($_) } |
                                                    ForEach-Object -Begin { $ss=[SecureString]::New() } -Process {$ss.AppendChar($_)} -End { $ss }))

$netCredInfo.UserName
$netCredInfo.Password
Run Code Online (Sandbox Code Playgroud)

您能否看一下并建议是否存在任何使代码不可靠的假设?

powershell credentials securestring networkcredentials powershell-core

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

在 Invoke-WebRequest 调用中信任自签名证书

有没有一种方法可以调用Invoke-WebRequest,例如期望证书的给定公钥来验证我信任连接?

如果没有,是否有另一种方法来调用 webrequest 并且只信任网页而不信任颁发者或忽略证书检查?

问题

我想加载一个带有Invoke-WebRequest. 我尝试通过 https 连接到网页,服务器提供了自签名证书。

由于我的证书存储中没有颁发者证书Invoke-WebRequest会抛出错误:

Invoke-WebRequest :根据验证程序,远程证书无效。

已知的解决方法

  1. 使用-SkipCertificateCheckPowershell v6.0.0 ref 中添加的-Switch
  2. 添加新的 Certificatepolicy 以信任所有证书引用
  3. 信任颁发者证书

我尝试过但没有成功

  1. 将网页证书添加到证书库而不信任颁发者证书
  2. 将网页证书添加到证书存储并使用-Certificate-Parameter ofInvoke-WebRequest指定此证书

PS:由于这个问题出现在 Powershell <5 和 Powershell Core 中,我将两者都标记了。

powershell https ssl-certificate powershell-core

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

Windows 终端 - 使用不同的配置文件启动 powershell

如何配置 Windows 终端以使用标准配置以外的单独配置文件启动 Powershell $Profile

这将有助于导入模块,例如posh-git并且psreadline仅在我启动的 Powershell 实例中,wt.exe而不是从pwsh.exe

powershell powershell-core windows-terminal

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

如何直接在bash脚本中运行PowerShell核心命令?

我主要使用脚本Az CLI中的命令bash来管理Azure资源。有时,我需要使用这些PowerShell core命令,因为Az CLI版本不存在。

我想在 shell 中同时使用Az CLIPS core命令bash。我的意思是,我想要only onebash 脚本并在其中执行所有必需的命令。

您知道直接在 bash 脚本中运行PowerShell core命令的方法吗?

bash azure azure-cli azure-devops powershell-core

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

从 PowerShell 对象生成 CLIXML 字符串,无需先序列化到磁盘

我有以下代码,它将一个对象导出到 XML 文件,然后将其读回并打印在信息流上。

try{
  # Sample object
  $Person = @{
    Name = 'Bender'
    Age  = 'At least 1074'
  }
  $Person | Export-CliXml obj.xml
  
  $cliXml = Get-Content -Raw ./obj.xml
  Write-Host $cliXml
} finally {
  if( Test-Path ./obj.xml ) {
    Remove-Item -Force ./obj.xml -EV rError -EA SilentlyContinue
    if( $rError ) {
      Write-Warning "Failed to remove ./obj.xml: $($rError.Exception.Message)"
    }
    Remove-Variable -Force $rError -EA Continue
  }
}
Run Code Online (Sandbox Code Playgroud)

有一个系统本地父会话,它监视其 STDOUT 以获取此输出,并将其重建为自己会话中的对象。

注意:我知道本地PSRemoting会话可以工作,但我需要它也可以在尚未配置或不会配置PSRemoting的系统上工作。

我想去掉中间人,而不是将对象写入磁盘。不幸的是,
Import-CliXMlExport-CliXml是名称中唯一带有 和 的 cmdlet …

powershell serialization powershell-core

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