我对 powershell 很陌生,我目前正在尝试编写一个脚本,该脚本在文件中查找引用的文件路径,仅取出路径的最后一部分(文件名)并将其移动到与包含它的文件夹相同的目标位置。
我有一个功能脚本可以做我想要的,唯一剩下的就是它不应该寻找引用文件的整个路径。因为路径不再正确。它应该只查找文件名并找到并移动它。
这是我当前的脚本:
$source = 'Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\Ursprung_test'
$destination = 'Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\24BHD'
$toDelete = 'Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\ToDelete'
$pattern1 = 'AmbulatoryBloodPressure'
$pattern2 = 'RuheEKG'
# Erstellt Array mit pfad und filename
$allFiles = @(Get-ChildItem $source -File | Select-Object -ExpandProperty FullName)
foreach($file in $allFiles) {
# Dateinhalt als Array
$content = Get-Content -Path $file
# Wählt Destinationspfad
if ($content | Select-String -Pattern $pattern1 -SimpleMatch -Quiet)
{
$dest = $destination
}
else {
$dest = $toDelete
}
# Prüft ob Datei einen Pfad enthält
$refCount = …Run Code Online (Sandbox Code Playgroud) 我有一个 python 脚本,我可以使用以下代码通过 PowerShell 运行它:
cd User\PythonScripts
python TestFile.py
Run Code Online (Sandbox Code Playgroud)
现在我想通过 PowerShell 脚本(记事本文件并将其另存为 ps1文件)。
我用谷歌搜索了很多,但我找不到答案,但我认为它应该是这样的:
$path = 'C:\User\PythonScripts'
$file = 'TestFile.py
Run Code Online (Sandbox Code Playgroud)
我想我仍然想念对 python 的引用(所以它知道他需要哪个程序)。我需要怎么做?
我正在尝试从 XML 文件中选择节点,但遇到了似乎由命名空间引起的问题。
下面的代码不返回任何内容。但是如果我从 XML 文件中删除命名空间,我会得到预期的结果。
$StandaloneXML = "test.xml"
# Load XML content
$NewStandaloneXML = New-Object -TypeName "System.XML.XMLDocument"
$NewStandaloneXML.Load($StandaloneXML)
# Get namespace
$Namespace = New-Object -TypeName "Xml.XmlNamespaceManager" -ArgumentList $NewStandaloneXML.NameTable
$Namespace.AddNamespace("jboss", $NewStandaloneXML.DocumentElement.NamespaceURI)
$NewStandaloneXML.SelectNodes("jboss:server/interfaces/interface", $Namespace)
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" ?>
<server xmlns="urn:jboss:domain:4.2">
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
</interfaces>
</server>
Run Code Online (Sandbox Code Playgroud)
名称 inet 地址 ---- ------------ 管理 inet-address 公网地址
我有一个包含 DNS .zone 文件的文件夹。
我试图返回所有文件和 IP 地址看起来像172.20.*.
我使用以下内容:
Get-ChildItem -Recurse -Path 'C:\Root' | Select-String -Pattern '*172.20.*' | group | select name
Run Code Online (Sandbox Code Playgroud)
但这会返回:
Select-String :字符串 *172.20.* 不是有效的正则表达式:解析 "*172.20.*" - 量词 {x,y} 不接任何内容。
我尝试-SimpleMatch在我的案例中使用这个案例Select-String但没有成功。将字符串括在双引号中也不起作用。
如果我使用实际文本作为我的模式,它可以毫无问题地工作。
我的问题在哪里?
我有很多文件 bmp 和 jpg,需要提取没有扩展名的文件名,在前面写一个特定的文本,在后面写一个十六进制变量,然后把它放在一个名为的文本文件中 list.txt
例如,文件是:picture1.bmp, picture2.spr,picture3.bmp
我提取没有扩展名的文本名称,在特定文本之前和提取名称之后放置一个十六进制变量,因此它在以下位置完成list.txt:
abc picture1 0x7f020000
abc picture2 0x7f020001
abc picture3 0x7f020002
Run Code Online (Sandbox Code Playgroud)
我不知道如何写入十六进制字符串,list.txt因为我的脚本将其转换为 base10。
我的脚本创建list.txt如下:
abc picture1 2130837504
abc picture2 2130837505
abc picture3 2130837503
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码:
$a=".field public static final "
$b=":I = "
$c= 0x7f01ffff
Get-ChildItem -Recurse -Include *.bmp,*.spr | ForEach-Object {$a+$_.BaseName+$b+(++$c)} | Out-File list.txt
Run Code Online (Sandbox Code Playgroud) 我正在将 Azure 部署脚本从 AzureRM 迁移到 Az,新模块似乎无法打开文件。
有任何想法吗?
我尝试用正斜杠替换反斜杠;我什至从脚本所在的文件夹中调用它,所以我不需要将完整的文件名传递给它,它会正确地将其解析为全名,但仍然无法打开它。
PS C:\dev\pq\service\scripts\azure\NestedTemplates> Set-AzStorageBlobContent -Container "florin-container" -Context $storageAccount.Context -File ApplicationInsights.json
Set-AzStorageBlobContent : Failed to open file C:\dev\pq\service\scripts\azure\NestedTemplates\ApplicationInsights.json: Illegal characters in path..
At line:1 char:1
+ Set-AzStorageBlobContent -Container "florin-container" -Context $stor ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Set-AzStorageBlobContent], TransferException
+ FullyQualifiedErrorId : TransferException,Microsoft.WindowsAzure.Commands.Storage.Blob.SetAzureBlobContentCommand
Run Code Online (Sandbox Code Playgroud)
2/13/19 更新:
我创建了一个非常简单的测试用例场景,在我们更大的脚本套件之外,可以很容易地重现问题。我在 c:\ 中放置了一个名为 test.json 的文件,它包含一个空的 json 对象,只有花括号,如下面的输出所示。我正在使用 AzureRM 别名方案:
PS C:\> type test.json
{}
PS C:\> type C:\test.json
{}
PS C:\> Enable-AzureRmAlias
PS C:\> $sa = Get-AzureRmStorageAccount …Run Code Online (Sandbox Code Playgroud) 我从 Powershellbros.com 借用了代码,该代码显示请求的数据在输出窗格中正确返回,但我想将其输出到 txt 文件。
我从https://www.powershellbros.com/powershell-tip-of-the-week-get-sccm-client-version-remotely/获得了代码,并且想要更好的格式版本。我结束脚本的方式创建了文件,但其中没有任何内容 (1KB)。
if ($Array) {
return $Array
}
& $Array Out-File -Append c:\temp\Version.txt
Run Code Online (Sandbox Code Playgroud) 如果我传入的应用程序池不存在,我正在编写一个脚本来创建一个新的应用程序池。创建池并在同一会话中运行 Get-IISAppPool 时,新的应用程序池不存在。
这是复制它的方法。
New-WebAppPool -Name "Test"
Get-IISAppPool
它不会显示创建的新的。
如果您打开一个新 shell 并运行 Get-IISAppPool,您将看到新的应用程序池。
关于如何克服这个问题的任何想法?
使用 Azure 的新 Az 模块,是否有人拥有使用名称获取 Azure VM 公共 IP 地址的语法?commandletGet-AzPublicIpAddress没有 VM 名称的参数,只有 IP 对象名称
这有效,但我在这里没有使用机器名称,它是 IP 对象本身的名称:
$CurrentIp = (Get-AzPublicIpAddress -ResourceGroupName 'RG1' -Name 'MyVMname-ip').IpAddress
Run Code Online (Sandbox Code Playgroud)
我不知道如何从 VM 对象中获取它,即这不起作用:
Get-AzVM -ResourceGroupName 'RG1' -Name 'MyVMname' | Get-AzPublicIpAddress
Run Code Online (Sandbox Code Playgroud) Start-Process和 和有Invoke-Item什么区别?我注意到你不能Invoke-Item chrome。我认为这Invoke-Item是专门针对具有给定文件路径的文件。但是使用Invoke-Item而不是有什么好处吗Start-Process(除了打字ii比打字快start)?
powershell ×10
azure ×2
formatting ×1
iis ×1
namespaces ×1
parsing ×1
python ×1
regex ×1
split ×1
string ×1
xml ×1
xpath ×1