在哪里放PowerShell脚本?
(我不敢相信我实际上在问这个问题,但是我今天没有脑力了。)
我刚刚写了我的第一个严重的PowerShell脚本,我真的很高兴。 我打算每天都用它。 我希望能够从Posh命令行中调用它。 我会给它一个动词 – 名词types的名字,但现在它是一个简单的.ps1,而不是那些花费高级function,参数等。
那么它应该去哪里,我怎样从一个Posh命令行调用它? 我打算写更多! 他们应该去哪里?
- 它应该是我的个人资料中的一个function吗?
- 它应该走在我的道路上吗?
- 它是否在PSMODULEPATH? 什么样的东西去那里? 它看起来是recursion还是像正常的PATH?
你们在哪里把你的PowerShell脚本,你怎么组织? 我有很多使用C#和C ++工具的经验,并且知道如何命名它们以及将它们放在哪里。 而在另一个极端,我做了很多蹩脚的.bat文件,这些文件通常是独立的,或者堆在一个文件夹中。 但PowerShell似乎是非常不同的。 你可以非常快速地制作糟糕的.bat文件types的东西,或者你可以用它来构build库和复杂的服务。
我真的很喜欢在开始之前如何开始组织这些事情的一些想法。 显然每个人都不一样,所以我希望有一些讨论。 谢谢!
我将我的个人脚本放在与我的个人资料相同的文件夹中。 然后,我可以将它们一起备份。 我的个人资料以:
$ProfileRoot = (Split-Path -Parent $MyInvocation.MyCommand.Path) $env:path += ";$ProfileRoot"
使用V2,您可以在configuration文件所在的WindowsPowerShell目录中创build模块目录。 当你运行import-module时,PS会自动查找该目录来加载模块。 我在WindowsPowerShell下创build了一个“脚本”目录,这是一个模块的兄弟目录。
我使用我的configuration文件使用以下代码使用variables设置一些目录:
PS> cat $Profile $scripts = "$(split-path $profile)\Scripts" $modules = "$(split-path $profile)\Modules" $docs = $(resolve-path "$Env:userprofile\documents") $desktop = $(resolve-path "$Env:userprofile\desktop") PS> cat variable:\scripts C:\Users\andy.schneider\Documents\WindowsPowerShell\Scripts PS> cat variable:\modules C:\Users\andy.schneider\Documents\WindowsPowerShell\Modules
我的build议: – 将脚本存储在一个目录中,例如c:\ posh – 将目录添加到$ env:path
$env:path += ";c:\posh"
这可以确保您可能位于其他目录,比如c:\ windows,但可以调用脚本
[c:\windows] > sampl[TAB] # it expands the name of file to sample.ps1, then hit enter
如果您的文件sample.ps1包含函数定义,并且每次都导入它,那么我会考虑将此行添加到$ profile文件中
. c:\posh\sample.ps1
关于脚本组织..根据脚本的目的只是几个目录:)个人,开发,外部(下载),样本,…
这就是我所做的:
注意:将“ModuleName”replace为有意义的内容。
创build一个模块并将其作为“C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ ModuleName \ ModuleName.psm1”保存在全局模块文件夹中。 例如:
function global:FancyFunction() { # do something interesting here. } Export-ModuleMember -function FancyFunction
打开您的PowerShellconfiguration文件,并添加以下行,以确保您的模块每次启动PowerShell会话时加载:
Import-Module ModuleName -Force
您可以通过input以下命令轻松find您的PowerShellconfiguration文件:
notepad $profile
当你打开一个新的powershell会话时,你应该能够从控制台或其他脚本调用你的函数,而不必做任何事情。