visual-c++ flutter-dependencies flutter-desktop visual-studio-2022 powershell-cmdlet
我有一个 PowerShell cmdlet,用于简化通过 RDP 连接到另一台计算机的过程。
在该 cmdlet 中,我运行执行以下操作:
if ($null -ne $Username -and $null -ne $Password) {
Start-Process -FilePath "cmdkey.exe" -ArgumentList @("/generic:`"TERMSRV/$ComputerName`"", "/user:`"$Username`"", "/pass:`"$Password`"") -WindowStyle Hidden
}
Start-Job -ScriptBlock {
param($InstallPath, $ComputerName, $Port, $Username, $Password)
$arguments = @("`"$(Join-Path $InstallPath '\Support Files\MSTSC\Default.rdp')`"")
if ($null -ne $Port) {
$arguments += "/v:`"$($ComputerName):$($Port)`""
} else {
$arguments += "/v:`"$($ComputerName)`""
}
Start-Process -FilePath "mstsc.exe" -ArgumentList $arguments -Wait
if ($null -ne $Username -and $null -ne $Password) {
Start-Process -FilePath "cmdkey.exe" -ArgumentList @("/delete:`"TERMSRV/$ComputerName`"") -WindowStyle Hidden
}
} …Run Code Online (Sandbox Code Playgroud) 我正在使用 Powershell 并尝试返回目录的子项(该子项恰好是子目录),然后使用 cmdletRename-Item将子目录名称重命名为其他名称。
我觉得下面的代码应该有效:
Get-ChildItem "C:\Users\Admin\Desktop\mydirectory\subdirectory" | Rename-Item -NewName {$_.Name -replace 'test'}
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
Rename-Item : Source and destination path must be different.
我在这里缺少什么?提前致谢!
powershell get-childitem rename-item-cmdlet powershell-cmdlet
根据Microsoft 的说法,cmdlet Set-GPPermissions接受选项“-replace”:
“这确保现有的权限级别被新的权限级别取代。”
我从 PowerShell 导入 GPO。之后我想设置安全过滤器。导入后,在设置安全过滤器之前,GPO 的安全过滤为“Authenticated Users”。现在我想删除该过滤器选项并将其替换为“myGroup”。为此,我使用以下命令:
Set-GPPermissions -Name "myGPO" -PermissionLevel GpoApply -TargetName "myGroup" -TargetType Group -replace
Run Code Online (Sandbox Code Playgroud)
结果是添加了一个引用“myGroup”的新安全过滤器,但组“Authenticated Users”并未被删除。Powershell cmdlet 不会替换过滤器,而是添加它。
提示?
提前致谢!
我正在为我的应用程序编写自定义 Powershell cmdlet,并且需要为某些 cmdlet 提供别名。假设我有 cmdlet Get-DirectoryListing,并且我想向此 cmdlet 添加别名(例如“gdl”)。我怎样才能做到这一点?
AliasAttribute 在这里不起作用,因为它仅适用于属性、索引器或字段声明。我也知道我们可以使用 Set-Alias 命令,但不知道该把它放在哪里。
是否可以以编程方式向 cmdlet 添加多个别名?
我拥有一个带有 DateTime 属性的 cmdlet,该属性表示服务器上事件的时间戳。该 cmdlet 读取服务器上的日志并输出一些信息。由于一堆事件可能在短时间内发生,因此毫秒精度对于输出的用户来说非常重要。
但是,当使用 format-list 或 format-table 时,输出仅显示秒,例如4/15/2015 5:31:30 PM。我更喜欢使用fff 时间格式。
我知道实际数据没有四舍五入,因为如果我查询 DateTime 值的 Millisecond 属性,我会看到正确的值。例如,对于给定的输出$event,如果我的日志行具有时间戳2015-04-16T00:31:30.525Z,$event.Timestamp.Millisecond则返回 525。
我可以在 cmdlet 中执行某些操作来指定 DateTime 应以毫秒显示吗?例如,当用户输入:
> Get-LogInfo | ft
Run Code Online (Sandbox Code Playgroud)
我想默认显示:
Timestamp EventData
--------- -------
4/15/2015 17:31:28.525 (data)
Run Code Online (Sandbox Code Playgroud)
我也希望格式列表有类似的行为。理想情况下,cmdlet 用户无需执行任何额外工作即可查看毫秒。
想知道是否有人可以帮我解决这个问题。
我可以使用包管理器控制台来启用迁移、添加迁移等。但我希望能够通过 PowerShell 对象使用 C# 代码来完成此操作
到目前为止我所拥有的是:
var ps = PowerShell.Create();
ps.AddCommand("Set-ExecutionPolicy");
ps.AddArgument("Unrestricted");
ps.AddCommand("Import-Module");
ps.AddParameter("Name");
ps.AddArgument(@"'.\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1'";
ps.AddCommand("Add-Migration");
ps.AddParameter("Name");
ps.AddArgument("Migration21Sept");
ps.AddParameter("ProjectName");
ps.AddArgument("Context1");
ps.Invoke();
Run Code Online (Sandbox Code Playgroud)
但是,当我执行此代码时,出现错误:“术语‘Add-Migration’未被识别为 cmdlet、函数、脚本文件或可操作程序的名称”
c# powershell entity-framework entity-framework-migrations powershell-cmdlet
我需要使用 .NET 中的 CmdLets 组合多个 Power Shell 脚本的输出作为管道输出。
例如 :
Command-GetA -combine Command-GetB | Command-GetD
Run Code Online (Sandbox Code Playgroud)
所以我想通过管道发送和GetA的输出。是否有一种紧凑的方法可以使用 powershell 脚本或 .NET cmdlet 来执行此操作?除了将输出存储在数组中然后将其传递到管道等方法之外?GetBGetD
另一个复杂的例子可能是:
Command-GetA -combine ( Command-GetB | Command-GetD ) | Command-GetF
Run Code Online (Sandbox Code Playgroud)
这应该结合GetA并GetB|GetD作为管道输入发送到GetF
编辑:
如果我能做这样的事情那就太好了 - @( GetA ; GetB) -ConvertToASingleList | 获取C
因此OutputOfGetA和OutputOfGetB不应该在 上单独调用GetC。两者都应该作为组合数组或列表对象传递给GetC
我创建了一个 Github Actions 工作流程,生成.msi我不想稍后执行的文件,以测试应用程序是否按预期工作。
工作流程实现如下
\nbuild-windows:\n runs-on: windows-latest\n steps:\n - uses: actions/checkout@v2.3.4\n - name: Create binary from branch\n run: |\n choco install make\n make build-windows\n - name: Generate msi\n shell: powershell\n run: .\\.github\\scripts\\windows\\gen-win.ps1\n - name: Install msi\n run: |\n echo "Start Msiexec"\n msiexec /qn /i "file.msi" /L*vx!\n echo "End Msiexec"\nRun Code Online (Sandbox Code Playgroud)\n基本上,此工作流程创建.exe文件(Create binary from branch步骤),然后使用 powershell 中的脚本生成.msi文件(Generate msi步骤),最后尝试安装.msi文件(Install msi步骤)。
我正在编写一个控制台应用程序来验证 PowerShell 脚本语法。我的请求是验证 PowerShell 脚本而不执行该脚本。我在下面的 PowerShell 命令中发现了这个命令,它可以在不执行脚本的情况下执行语法检查。
Get-Command -syntax 'D:\powershell\deleteDemoFile.ps1'
Run Code Online (Sandbox Code Playgroud)
但是,我发现它没有进行完整的语法检查。例如,在 PowerShell 中使用变量而未声明,或者变量在(Function、if、ForEach 等)中存在拼写错误,上述命令不会捕获此类语法错误。
下面是 PowerShell 脚本文件 (.\deleteDemoFile.ps1) 的示例代码。请注意,下面的代码中 (if, Function) 的拼写错误,并且使用了变量“$log_dir”但未声明。
当我运行 PowerShell 命令时,Get-Command -syntax 'D:\powershell\deleteDemoFile.ps1'该命令不会引发任何语法错误。
Write-Host "Hello, World!"
ifTypo(-not (test-path -path $log_dir )) {
new-item -itemtype directory -path $log_dir
}
FunctionTypo log {
Param ([string]$log_string)
write-host $log_string
add-content $log_file -value $log_string
}
log("Deleting a demo txt file")
# PowerShell -WhatIf safety parameter
Clear-Host
Get-Childitem D:\powershell\SomeFile\demo.txt -Recurse | Remove-Item
Run Code Online (Sandbox Code Playgroud)
所以我想知道。
powershell ×8
.net ×1
alias ×1
c# ×1
c#-4.0 ×1
datetime ×1
entity-framework-migrations ×1
filter ×1
gpo ×1
jobs ×1
pipeline ×1
security ×1
validation ×1
visual-c++ ×1
windows ×1