有没有理由在函数定义中使用"Param(...)"结构?
我的理解是你应该使用它来指定脚本(和脚本块)的参数.我在网上看到很多带有参数的例子,而不是仅仅列出函数名后面的参数.
例:
function Foo([string]$Bar){
#Body of function
}
Run Code Online (Sandbox Code Playgroud)
要么,
function Foo{
Param([string]$Bar)
}
Run Code Online (Sandbox Code Playgroud) 我发现自己正在编写一系列相关函数来处理不同的名词(集群,sql服务器,一般服务器,文件等),并将这些函数组中的每一个放在单独的文件中(比如cluster_utils.ps1) .我希望能够在我的个人资料中"导入"其中一些库,如果我需要,可以在我的PowerShell会话中"导入"其他库.我已经编写了两个似乎可以解决问题的函数,但由于我只使用了powershell一个月,我想我会问是否有任何现有的"最佳实践"类型的脚本我可以使用.
要使用这些功能,我点源它们(在我的个人资料或我的会话中)...例如,
# to load c:\powershellscripts\cluster_utils.ps1 if it isn't already loaded
. require cluster_utils
Run Code Online (Sandbox Code Playgroud)
以下是功能:
$global:loaded_scripts=@{}
function require([string]$filename){
if (!$loaded_scripts[$filename]){
. c:\powershellscripts\$filename.ps1
$loaded_scripts[$filename]=get-date
}
}
function reload($filename){
. c:\powershellscripts\$filename.ps1
$loaded_scripts[$filename]=get-date
}
Run Code Online (Sandbox Code Playgroud)
任何反馈都会有所帮助.
你知道使用powershell V1的任何好的远程解决方案(我知道V2的东西很棒,但我的组织不喜欢使用预发布软件).我不需要任何明显的东西,只是在另一个盒子上启动PowerShell脚本并在完成后得到结果的方法.我正在考虑使用sysinternals PSEXEC和export-csv/import-csv,只是制作有用的东西.不过,我宁愿别人做这项工作.
我正在尝试在PowerShell 2.0中执行基本的后台作业,我看到了start-job和invoke-command -asjob的不同内容.
如果我这样做:
start-job -scriptblock {get-process}
我得到一个job对象,但是子作业(由start-job自动创建)总是有一个JobStateInfo为"NotStarted".
但是,这可以按预期工作:
invoke-command -scriptblock {get-process} -computer localhost -asjob
我已经运行了enable-psremoting ....我还需要做些什么才能让后台工作正常工作?
假设我在一个模块(称为 MyModule.psm1,在模块的适当位置)中有以下代码:
function new-function{
$greeting='hello world'
new-item -path function:\ -name write-greeting -value {write-output $greeting} -Options AllScope
write-greeting
}
Run Code Online (Sandbox Code Playgroud)
导入模块并运行 new-function 后,我可以成功调用 write-greeting 函数(由 new-function 创建)。
当我尝试在 new-function 调用范围之外调用 write-greeting 函数时,它失败了,因为该函数不存在。
我试过 dot-sourcing 新功能,但这无济于事。我已经提供了-option Allscope, 但显然它只包含在子作用域中。
我还尝试使用 export-modulemember write-greeting 明确遵循 new-item 调用,该调用不会出错,但也不会创建函数。
我希望能够从模块内部的函数动态创建一个函数(即通过 new-item,因为函数的内容和名称将根据输入而变化),并使新创建的函数可用于在模块外部调用。
具体来说,我希望能够做到这一点:
Import-module MyModule
New-Function
write-greeting
Run Code Online (Sandbox Code Playgroud)
并看到“hello world”作为输出
有任何想法吗?