我是PS的新手,已经获得了一个可以运行的脚本.我做的第一件事是输入c:\powershell\ir.ps1.这似乎有效.然后在定义我的客户端目录之后,我应该只能输入诸如的函数ir-n.这在人员的办公桌上工作,告诉我该怎么做,但是我收到以下错误:
The term 'ir-n' is not recognized as the name of a cmdlet, function, script file, or
operable program. Check the spelling of the name,
or if a path was included, verify that the path is correct and try again.
At line:1 char:5
+ ir-n <<<<
+ CategoryInfo : ObjectNotFound: (ir-n:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Run Code Online (Sandbox Code Playgroud)
有什么简单的我可以做到让它运行?我看到ir.ps1文件中的函数,所以我知道它在那里.
我正在尝试设置PowerShell命令,因此Get-Help -full将会显示有关如何运行脚本的完整信息。我有要在此帮助中显示的默认值。我有以下几点:
<#
.PARAMETER SenderEmail
The name of the user who is sending the email message. Although not
officially required, it will be checked to make sure it's not blank.
#>
Param (
[String]
[Parameter(
Position=1,
HelpMessage="Sender's Email Address")]
$SenderEmail = "bob@fubar.com"
)
Run Code Online (Sandbox Code Playgroud)
但是,当我键入Get-Help -detail时,将显示以下内容。
-SenderEmail <String>
The name of the user who is sending the email message. Although not
officially required, it will be checked to make sure it's not blank.
Required? false
Position? 2
Default value …Run Code Online (Sandbox Code Playgroud) 我想更改INI文件中的一些值.不幸的是,我有2个不同部分的密钥,它们共享相同的名称但需要不同的值.我的代码使用了Get-IniContent函数from PsIni.
示例INI文件:
[PosScreen]
BitmapFile=C:\Temp\Random.bmp
Bitmap=1
[ControlScreen]
BitmapFile=C:\Temp\Random.bmp
Bitmap=1
Run Code Online (Sandbox Code Playgroud)
我需要将以上内容更改为以下内容:
[PosScreen]
BitmapFile=C:\Temp\FileC.bmp
Bitmap=1
[ControlScreen]
BitmapFile=C:\Temp\FileD.bmp
Bitmap=1
Run Code Online (Sandbox Code Playgroud)
我正在使用的PowerShell代码似乎工作,但它将每个值更改为"文件D".显然解析所有内容两次,每个部分的名称相同.
$NewFileC = "C:\Temp\FileC.bmp"
$NewFileD = "C:\Temp\FileD.bmp"
$POSIniContent = Get-IniContent "C:\scripts\Update-EnablerImage\WINSUITE.INI"
$BOIniContent = Get-IniContent "C:\scripts\Update-EnablerImage\WINSUITE.INI"
If ($POSIniContent["PosScreen"]["BitmapFile"] -ne $NewFileC) {
Get-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI" |
ForEach-Object {$_ -replace "BitmapFile=.+" , "BitmapFile=$NewFileC" } |
Set-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI"
}
If ($BOIniContent["ControlScreen"]["BitmapFile"] -ne $NewFileD) {
Get-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI" |
ForEach-Object {$_ -replace "BitmapFile=.+" , "BitmapFile=$NewFileD" } |
Set-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI"
}
Run Code Online (Sandbox Code Playgroud)
我的斗争是如何独立改变每一个.我是一个脚本新手,所以请求一些帮助.尝试使用条件逻辑(ForEach $line in $INIFile例如),但没有运气.
我正在尝试为计算机上的每个hdd卷获取各种属性.
我正在使用cmdlet get-volume,然后通过它foreach,但Windows Server 2008中不存在该cmdlet.:(
有人知道另一种选择吗?
我只需要驱动器号,objectId/guid,可用空间,总空间和每个卷的名称.
我正在研究一个脚本,以更改Windows Server中的本地安全策略。当我在PowerShell提示符下自行运行这些命令时,它们可以正常工作。但是,当我运行脚本时,出现"Unexpected token 'PasswordComplexity' in expression or statement."错误。
问题似乎源于以下事实:脚本似乎没有执行secedit命令,因此这些get-content行没有要编辑的文件。
为什么secedit不运行?我尝试将secedit命令放在if语句之外,但得到的结果相同。
if ($win_ver -match "Server"){
#export current secuirty policy
secedit /export /cfg c:\new.cfg
start-sleep -s 10
#Disable Password Complexity
((get-content c:\new.cfg) -replace (‘PasswordComplexity = 1?, ‘PasswordComplexity = 0?)) | Out-File c:\new.cfg
#Disable password expiration
((get-content c:\new.cfg) -replace (‘MaximumPasswordAge = 42?, ‘MaximumPasswordAge = -1?)) | Out-File c:\new.cfg
#disable minmum password length
((get-content c:\new.cfg) -replace (‘MinimumPasswordLength = 6?, ‘MinimumPasswordLength = 1?)) …Run Code Online (Sandbox Code Playgroud) 与此问题类似,运行以下代码后,浏览器对话框会显示所有正确的按钮,但缺少通常显示可用文件夹的选择区域:
[void] [Reflection.Assembly]::LoadWithPartialName( 'System.Windows.Forms' )
$d = New-Object Windows.Forms.FolderBrowserDialog
$d.ShowDialog( )
Run Code Online (Sandbox Code Playgroud) Visual Studio做到了; 反射器做到了; 现在我想要:)
我想检索一些框架组件一些成员(即XML文档mscorlib.dll,System.dll等等).我认为这将涉及:
<summary>,<remarks>等)
为框架程序集保留的XML文件在哪里?解密XMLDOC命名方案的任何要点?是否有任何库可以使这个过程更容易?
到目前为止,我有这个代码.
$form = New-Object System.Windows.Forms.Form
$form.Size = New-Object System.Drawing.Size(900,600)
$dataGridView = New-Object System.Windows.Forms.DataGridView
$dataGridView.Size=New-Object System.Drawing.Size(800,400)
$go = New-Object System.Windows.Forms.Button
$go.Location = New-Object System.Drawing.Size(300,450)
$go.Size = New-Object System.Drawing.Size(75,23)
$go.text = "Select"
$form.Controls.Add($go)
$form.Controls.Add($dataGridView)
$dataGridView.ColumnCount = 4
$dataGridView.ColumnHeadersVisible = $true
$dataGridView.Columns[0].Name = "Name"
$dataGridView.Columns[1].Name = "ID"
$dataGridView.Columns[2].Name = "Description"
$dataGridView.Columns[3].Name = "Memory"
$dataGridView.Columns[0].width = 240
get-process | foreach {
$dataGridView.Rows.Add($_.Name,$_.ID,$_.Description,$_.WorkingSet) | out-null
}
$go.Add_Click({
$selectedRow = $dataGridView.CurrentRowIndex
write-host $selectedRow
})
[void]$form.ShowDialog()
Run Code Online (Sandbox Code Playgroud)
它只是获取进程名称,ID等属性,并将它们放入一个预定义的头文件中DataGridView.
我的问题是我想看到我点击的行$selectedRow = $dataGridView.CurrentRowIndex并将其输出到控制台.相反,当按下"选择"按钮时,空白字符串将输出到终端.
我正在编写一个PowerShell脚本,它计算了某一天中4624个EventID的数量,但是当我按日期对信息进行分组时,我迷路了.有没有人可以帮助我?我的输出应该包含当天登录的日期和数量,仅此而已.
这是我的代码:
Get-EventLog "Security" -Before ([DateTime]::Now) |
Where -FilterScript {$_.EventID -eq 4624}
Run Code Online (Sandbox Code Playgroud) 将大约 200,000 个文件迁移到 OneDrive for Business,发现有一些他们不喜欢的字符 - 最大的罪犯是#。我有大约 3,000 个带有哈希值的文件,我想将它们全部替换为No.. 例如,旧:File#3.txt新:File No.3.txt
我尝试使用 PowerShell 脚本,但它都不喜欢#:
Get-ChildItem -Filter "*#*" -Recurse |
Rename-Item -NewName { $_.name -replace '#',' No. ' }
Run Code Online (Sandbox Code Playgroud)
我在弄清楚保留字符的语法方面运气不佳 - 我尝试过\#,,,,#\但'*#*'没有运气。
任何人都可以阐明这一点或提供一种快速方法来递归替换所有这些哈希标签吗?
谢谢。
powershell ×9
windows ×2
.net ×1
arrays ×1
datagridview ×1
event-id ×1
event-log ×1
find ×1
parameters ×1
replace ×1
security ×1
winforms ×1
xml ×1