目前我有一个批处理文件来备份文件.我需要备份文件时手动运行它.我想要添加的唯一内容是当前日期.这是我有的:
xcopy/W/Y ACTIVE.DB ACTIVE.DB.BACKUP
目标文件应该只是ACTIVE.DB.BACKUP.YYYYMMDD.我将如何创建一个脚本,允许我从Windows资源管理器中双击它并使xcopy发生?
根据我的研究,我不相信以下内容很容易实现,如果有的话.然而,作为最后的手段,我想我会在这里查看.
在Powershell 2.0中,我想要一种方法来将(恼人的)长参数名称减少到各种cmdlet.我想绝对控制速记版本的样子.(而不是PS使用的任何参数缩写方案的奴隶.)
所以,举例来说,我希望能够做到这样的事情:
# Command goes on this first line to alias "-ForegroundColor" to "-fg"
# Command goes on this second line to alias "-BackgroundColor" to "-bg"
Wr-te-Host -fg yellow -bg black "Parameter aliases now work just like I want."
Run Code Online (Sandbox Code Playgroud)
我最接近这个功能的是什么,以及如何?我无法使用'get-help about_parameters'找到有关参数缩写的任何内容.
谢谢!
任何人都可以告诉我如何将参数添加到我的自定义C#cmdlet,这是一个Hashtable/StringDictionary,以便我可以以类似于这样的方式调用我的cmdlet:
CustomCmdlet -File $someFilePath `
-StringDictionary/HashtableParameter @{
"name1"="value1"
"name2"="value2"
"name3"="value3"
...
}
Run Code Online (Sandbox Code Playgroud)
我根本找不到任何文档/示例,这些文档/示例清楚而简单地解释了如何执行此操作,或者甚至可以用于自定义cmdlet.
我可以使用:
[Parameter(Mandatory = false, Position = 9)]
public Dictionary<string,string> FieldValues { get; set; }
[Parameter(Mandatory = false, Position = 9)]
public HashTable FieldValues { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
或者是其他东西?
亲切的问候
我正在尝试创建一个简单的PowerShell cmdlet,它具有一些必需参数.我已经找到了以下代码,但是,我无法执行它:
function new-command() {
[CmdletBinding()]
PARAM (
[Parameter(Mandatory=$true)]
[string]$Name
)
}
new-command
Run Code Online (Sandbox Code Playgroud)
返回以下错误:
在表达式中缺少关闭')'.行:5个字符:3 + [<<<< string] $ Name
我究竟做错了什么?
我是Start-Jobcmdlet的新手,我在调用带有cmdlet的脚本块时遇到了问题.这是我到目前为止所拥有的:
Start-Job -ScriptBlock {
$ServiceObj = Get-Service -Name $ServiceName -ComputerName $Computer -ErrorAction Stop
Stop-Service -InputObj $ServiceObj -erroraction stop
}
Run Code Online (Sandbox Code Playgroud)
我在运行时看到错误receive-job,-ComputerName参数为null或为空,-InputObj参数为null或为空.在这两种情况都不是这样.上面的代码片段是从两个foreach循环内部调用的:
foreach($Computer in $ComputerNames) {
foreach($ServiceName in $ServiceNames) {
#..call snippet above
}
}
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用-ArgumentListwhen调用我的脚本块,但也没有运气.我确定我错过了什么?
我想做以下事情:
New-WebVirtualDirectory -Site "Site1" -Name "XX_$args[0]" -physicalPath "c:\sites\XX_$args[0]"
Run Code Online (Sandbox Code Playgroud)
其中"XX_"是一个静态字符串,$ args [0]是传递给脚本的第一个参数.现在我知道我可以通过创建两个变量然后将这些变量传递给cmdlet(New-WebVirtualDirectory)来"解决"这个问题但是有没有办法在线连接静态字符串和变量($ args [0])没有添加两个变量?
我尝试将它们包含在()中(例如-Name("XX_"+ $ args [0]))但没有成功.
我正在编写一个脚本,我想使用PowerShell的CmdletBinding().有没有办法在脚本中定义函数?当我尝试时,PowerShell在表达式或语句中抱怨"意外的toke'函数"
这是我正在尝试做的简化示例.
[CmdletBinding()]
param(
[String]
$Value
)
BEGIN {
f("Begin")
}
PROCESS {
f("Process:" + $Value)
}
END {
f("End")
}
Function f() {
param([String]$m)
Write-Host $m
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,编写模块是浪费的开销.这些函数只需要可用于这一个脚本.我不想弄乱模块路径或脚本位置.我只想运行一个包含其中定义的函数的脚本.
我想设置一个文件的编码采用的参数为ANSI -Encoding的的Set-Contentcmdlet的,我想这一个,但它没有工作:
Set-Content -LiteralPath "$filePath" -Encoding Default
Run Code Online (Sandbox Code Playgroud) 所有,我正在编写一个 Powershell cmdlet。让我的本地机器上的 cmdlet 一切正常。查看访问远程机器所需的内容,似乎我需要在我的项目中引用 Microsoft.Management.Infrastructure.dll。我已经搜索我的系统无济于事。
所以我打了谷歌。我确认我正在运行 Windows 7 SP1。下载并安装了 Windows 管理框架 (WMF) 4.0。没运气。仍然没有DLL。我确认我达到了最低要求。
然后我发现一个 Microsoft 页面说版本 5 需要 WMF 4.0 作为安装的先决条件。所以我将我的 .Net Framework 升级到 4.6.2。然后安装WMF 5.0。在我的系统上的任何地方仍然没有 .DLL。
有谁之前经历过这个吗?任何人都可以阐明我可能做错了什么吗?我使用的是 Visual Studio 2010。这是问题的原因吗?
我继续在网络上搜索并发现文章指出 Microsoft.Management.Infrastructure dll 是 Windows 7 SDK 的一部分。尝试安装 SDK 没有效果。仍然无法在我的系统上加载 dll。
继续寻找解决办法。
Get-ADusercmdlet的示例:
$Users = Get-ADuser -Filter *
Run Code Online (Sandbox Code Playgroud)
在大多数情况下它会返回多个 ADuser 对象,但它是什么“集合”类型?文档只说它会返回一个或多个 Microsoft.ActiveDirectory.Management.ADUser 的用户对象。
尝试使用例如,($Users -is [System.Collections.ArrayList])但我无法确定“集合”类型?