Articles of PowerShell的

使用PowerShell重命名文件

我需要在Windows PowerShell中一次重命名一堆文件。 我在这里阅读HTG的文章,这有一点帮助。 我的问题是,它只会重命名目录顶部的文件,没有更深的。 例如:有FOLDER A,FOLDERA内部是文件和FOLDER B,FOLDER B内部是另一个文件。 两个文件夹和两个文件都需要重新命名。 现在它的工作方式是,文件夹A,文件夹A中的文件和文件夹B正在重命名,但不是文件夹B中的文件。 我目前的代码是: Dir | Rename-Item –NewName { $_.name –replace “ “,”_” } 谢谢您的帮助!

如何将unicode文件名批量转换为Ascii文件名Windows XP或PowerShell

问题:出于某种奇怪的原因, windows zip util不会压缩包含Unicode文件名的文件夹 。 所以,我需要将一大组文件名(不是内容)转换为ASCII文件名。 这里的答案讨论内容转换 如何批量/批量转换/重命名Windows CMD行或Power Shell中的文件名本身。 我不在乎输出文件的名字有多余1等 //While this changes the content inside the file. it does not rename my file name! COPY /Y UniHeader.txt Unicode_Output.txt CMD /U /C Type ANSI_Input.txt >> Unicode_Output.txt

从Powershell运行R脚本

在批处理脚本中,我可以使用以下语法运行R脚本: Rterm.exe –quiet –slave –vanilla < "C:\some_script.R" 但是,Powershell似乎已经为未来的扩展保留了“<”。 我想知道是否有一个直接的方法来运行另一个Powershell脚本中的R脚本。

Powershell – 本地凭证validation

我利用Powershell来检查本地pipe理员凭据作为这个片段的基础,并遇到问题。 (不想要threadjack) Add-Type -AssemblyName System.DirectoryServices.AccountManagement $pc = New-Object System.DirectoryServices.AccountManagement.PrincipalContext('machine',$entry) if($pc.ValidateCredentials("secretadmin", "secretpassword")){Write-host "good"}else{write-host "bad"} 它大约有百分之五十的时间。 剩下的时间,我得到这个 使用“2”参数调用“ValidateCredentials”exception:“不允许同一用户使用多个用户名与服务器或共享资源build立多个连接,断开以前与服务器或共享资源的所有连接,再试一次。 这让我想起使用net use的批处理脚本来validation我们只需要删除映射的驱动器来解决问题的凭据。 由于没有保存的对象,即时通讯知道,即时通讯不确定如何清除此login。 我检查login用户,什么都没看见 基本上,我们正在为医院build立数百台服务器,需要确保遵守政策,检查这些凭证只是其中的一部分,但这是我遇到的问题。 任何帮助将不胜感激。 在提出这些问题之前请注意一下。 凭据是正确的,他们在脚本中被硬编码,我可以收到失败,并立即通过RDP和psexeclogin相同的凭据引发错误。 防火墙允许任何从我的主机到目的地。

如何更改PowerShell中其他用户的特定registry设置

目标: 要在PowerShell中编辑特定用户的特定registry项设置,而不是其他人。 已知: 操作系统:Windows 8.1embedded式行业专业版(与Win 8.1相同,但具有一些embedded式function) 我可以通过打开REGEDIT,selectHKU,然后点击文件菜单,单击加载configuration单元,导航到用户的configuration文件目录,例如:c:\ users \ MrEd,然后在出现提示时input'ntuser .dat' – 导入HKEY_CURRENT_USER。 Hive将被装入HKU,您可以浏览并进行必要的修改。 概要: 我有一个powershell脚本返回特定用户的SID,但是当在registryconfiguration单元的上下文中使用时,configuration单元“没有find” – 所以我猜我一定是错过了一个步骤? 如何从Powershell“加载configuration单元”? 还是我错过了一个特殊的,神奇的山羊内脏键盘上的咒语? Param( [string]$user= $null ) Function GetSIDfromAcctName() { Param( [Parameter(mandatory=$true)]$userName ) $myacct = Get-WmiObject Win32_UserAccount -filter "Name='$userName'" return $myacct.sid } if($user) { $sid = GetSIDfromAcctName $user New-PSDrive HKU Registry HKEY_USERS $myHiveEntry = Get-Item "HKU:\${sid}" Write-Host "Key:[$myHiveEntry]" […]

Windows PowerShell中的PerlIO和CMD.exe

显然,我有一个Perl脚本的结果在两个不同的输出文件,这取决于我是否在Windows PowerShell或cmd.exe下运行它。 脚本可以在这个问题的底部find。 文件句柄用IO::File打开,我相信PerlIO正在做一些棘手的事情。 看起来好像在cmd.exe下select的编码是更紧凑的编码(4.09 KB),相比PowerShell生成的文件几乎两倍的大小(8.19 KB)。 该脚本需要一个shell脚本并生成一个Windowsbatch file。 看起来像在cmd.exe下生成的只是常规的ASCII(1字节字符),而另一个似乎是UTF-16(前两个字节FF FE ) 有人可以validation并解释为什么PerlIO在Windows Powershell下的工作方式与cmd.exe不同? 另外,如何使用IO::File显式获取ASCII-magic PerlIO文件句柄? 目前,只有使用cmd.exe生成的文件是可执行的。 UTF-16 .bat (我认为是编码)不能由PowerShell或cmd.exe执行。 顺便说一句,我们使用Perl 5.12.1 MSWin32 #!/usr/bin/env perl use strict; use warnings; use File::Spec; use IO::File; use IO::Dir; use feature ':5.10'; my $bash_ftp_script = File::Spec->catfile( 'bin', 'dm-ftp-push' ); my $fh = IO::File->new( $bash_ftp_script, 'r' ) or die $!; […]

在.BATch文件中将一个小的PS脚本转换成一个长行

我从这个问题的答案中得到了这个PowerShell代码; 它显示PS代码运行的cmd.exe窗口的位置/尺寸: $WindowFunction,$RectangleStruct = Add-Type -MemberDefinition @' [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; } '@ -Name "type$([guid]::NewGuid() -replace '-')" -PassThru $MyWindowHandle = (Get-Process -Id (Get-WmiObject Win32_Process -Filter "ProcessId=$PID").ParentProcessId).MainWindowHandle $WindowRect […]

在PowerShell中启动一个独立的后台进程

我有一个Java程序,我想从PowerShell脚本作为后台进程启动,类似于守护进程在Linux上运行的方式。 PowerShell脚本需要做几件事情: 在后台运行该程序作为一个单独的和分离的进程,这意味着父窗口可以closures,进程继续运行。 将程序的标准输出和标准错误redirect到文件。 将后台进程的PID保存到一个文件,以便以后可以用另一个脚本来终止。 我在Linux上有一个shell脚本来启动程序,如下所示: $ java -jar MyProgram.jar >console.out 2>console.err & 我希望使用PowerShell脚本在Windows上复制相同的行为。 我已经尝试使用Start-Process与各种组合的选项,以及创buildSystem.Diagnostics.ProcessStartInfo和System.Diagnostics.Process对象,但到目前为止,我没有任何运气。 PowerShell作为后台进程启动程序,但是当启动PowerShell会话的DOS窗口closures时,程序突然终止。 我希望它在后台启动,并独立于启动它的命令窗口。 输出redirect也很麻烦,因为输出和错误stream似乎只能在正在同一窗口中运行的进程中redirect(例如,使用-NoNewWindow )。 在PowerShell中这种事情是可能的吗?

Powershell Get-Content + Invoke-Expression单独执行语句,还是一次执行所有语句?

考虑这个说法: Get-Content .\zipper.ps1 | Invoke-Expression 以下是Technet中logging的一个变体。 Invoke-Expression (Get-Content '.\zipper.ps1' -Raw) 这两个陈述工作得很好,虽然第二个执行得更快。 假设zipper.ps1是一个包含多行可执行Powershell代码的脚本。 上述语句是否将zipper.ps1中的每一行作为单独的命令执行? 或者,将整个脚本作为一个大的连接string来执行? 我的问题涉及到powershell语句的字符限制 – 如果每个代码行都在powershell字符限制内,但是整个脚本超过了字符限制,上述命令是否会超出字符限制? PowerShell可能有260个字符的限制(不确定)。 这些页面在Powershell中提到了字符限制: https://support.microsoft.com/en-us/kb/830473 https://social.technet.microsoft.com/Forums/windowsserver/en-US/f895d766-5ffb-483f-97bc-19ac446da9f8/powershell-command-size-limit?forum=winserverpowershell 细节: Technet指出: “ Get-Content cmdlet获取path指定位置的项目内容,例如文件中的文本。 和 “ Invoke-Expression cmdlet将评估或运行指定的string作为命令,并返回expression式或命令的结果。 到目前为止这么好 – 这非常清楚地解释了我的声明是如何以及为什么如此。 但它不会告诉我这些语句是作为单独的语句执行还是作为一个大的连接string来执行的。 第二个变化跑得快的事实可能是一个线索。 也许我需要添加一个For..Each 。 technet文档说Get-Content返回一个集合,而这个Technet文章说它返回一个数组。 这是冲突的信息,但不知道arraysVS收集事项我的问题在这里。 谢谢

是否有可能编写一个在bash / shell和PowerShell中运行的脚本?

我需要创build一个集成脚本来设置一些环境variables,使用wget下载文件并运行它。 面临的挑战是它需要能够在Windows PowerShell和bash / shell上运行的SAME脚本。 这是shell脚本: #!/bin/bash # download a script wget http://www.example.org/my.script -O my.script # set a couple of environment variables export script_source=http://www.example.org export some_value=floob # now execute the downloaded script bash ./my.script 这在PowerShell中是一样的: wget http://www.example.org/my.script -O my.script.ps1 $env:script_source="http://www.example.org" $env:some_value="floob" PowerShell -File ./my.script.ps1 所以我想知道这两个脚本是否可以在任一平台上合并并运行成功? 我一直在试图find一种方法,把他们在同一个脚本,并得到bash和PowerShell.exe忽略错误,但没有成功这样做。 任何猜测?