如何在PowerShell中使用这里的字符串来正确地编写pip.ini和.condarc文件?



免责声明:我对PowerShell越来越熟悉了,但我对PowerShell还相当缺乏经验。

我想使用PowerShell和here-string语法一起编写pip.ini.condarc配置文件,分别使用Python包管理器pip, conda。有了.condarc,没有错误,但我认为我必须在Notepad++中再次重写它才能真正使其工作-我认为这是一个文件编码问题:

mkdir 'C:ProgramDataconda.condarc'
echo @"
show_channel_urls: true
allow_other_channels: false
report_errors: false
remote_read_timeout_secs: 120
"@ > C:ProgramDataconda.condarc

下面给出了pip.ini的错误,因为[global]:

mkdir 'C:ProgramDatapippip.ini'
echo @"
[global]
index = https://xxxx/nexus/repository/xxxx/pypi
index-url = https://xxxx:8443/nexus/repository/xxxx/simple
trusted-host = xxxx:8443
"@ > C:ProgramDatapippip.ini

Get-Content pip.ini运行良好,但pip config list -v返回:

PS C:Program Files> pip config list -v
Configuration file could not be loaded.
File contains no section headers.
file: 'C:\ProgramData\pip\pip.ini', line: 1
'ÿþ[x00gx00lx00ox00bx00ax00lx00]x00n'

备注:xxxx代表公司敏感信息,以原文代替。

我也尝试转义带有'的方括号,但是没有成功。

是否有一种方法来指定一些文件编码像上面的UTF-8或问题可以以某种方式解决在另一种自动化的方式?

Windows Powershell中,重定向操作符使用 Unicode 编码(换句话说,使用小端字节顺序的UTF-16))。这就是为什么您会看到这种奇怪的文件内容。

  • PowerShell Core运行代码(pwsh.exe),或
  • 使用Out-File cmdlet和它的Encoding参数代替>重定向器。

但是,请注意Windows PowerShell倾向于使用以下代码片段添加UTF-8字节顺序标记:

$MyRawString = @"
[global]
index = https://xxxx/nexus/repository/xxxx/pypi
index-url = https://xxxx:8443/nexus/repository/xxxx/simple
trusted-host = xxxx:8443
"@
$MyPath = "C:ProgramDatapippip.ini"
$MyRawString | Out-file -FilePath $MyPath -Encoding utf8

Windows PowerShell 解决方案. 使用。net的UTF8Encoding类并将$False传递给构造函数似乎可以工作(从这个M中偷来的)。达德利的答案):

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($MyPath, $MyRawString, $Utf8NoBomEncoding)

Get-Help About_Redirection

  • Windows PowerShell ( powershell.exe)

当你写入文件时,重定向操作符使用 Unicode 编码。如果文件具有不同的编码,则输出可能不是格式化正确。要将内容重定向到非unicode文件,请使用Out-File cmdlet及其Encoding参数

  • PowerShell核心(pwsh.exe, version 6+)

当您写入文件时,重定向操作符使用 UTF8NoBOM 编码。如果文件具有不同的编码,则输出格式可能不正确。用不同的类型写入文件编码,使用Out-File cmdlet及其Encoding参数。

注意有一个错误在PowersShell 5.1的About_Redirection帮助主题的在线版本中…

Out-File在Windows PowerShell 5.1默认是Unicode在PowerShell Core 7+它是UTF8。

你正在使用mkdir创建一个对我没有意义的文件。

无论如何都不需要预先创建文件。因此,结合上面的内容,可以像这样:

@"
show_channel_urls: true
allow_other_channels: false
report_errors: false
remote_read_timeout_secs: 120
"@ | Out-File  C:ProgramDataconda.condarc
@"
[global]
index = https://xxxx/nexus/repository/xxxx/pypi
index-url = https://xxxx:8443/nexus/repository/xxxx/simple
trusted-host = xxxx:8443
"@ | Out-File C:ProgramDatapippip.ini

最新更新