在哪里放置PowerShell脚本?

时间:2009-06-18 07:22:36

标签: powershell

(我无法相信我实际上是在问这个问题,但是我当天没有脑力。)

我刚刚编写了我的第一个严肃的PowerShell脚本,我对它非常满意。我计划每天使用它。我希望能够从Posh命令行调用它。我会给它一个动词 - 名词类型的名字,但是现在它是一个简单的.ps1而不是那些使用参数等的花哨的高级函数。

那么应该去哪里以及如何从Posh命令行调用它?我打算写更多!他们应该去哪儿?

  • 它应该是我个人资料中的功能吗?
  • 它应该走在我的道路上吗?
  • 它是否进入PSMODULEPATH?无论如何,那里有什么样的东西?它是递归的还是像普通的PATH一样?

你们在哪里放置PowerShell脚本以及如何组织它们?我在制作C#和C ++工具方面有很多经验,知道如何命名它们以及放置它们的位置。而在另一个极端我已经做了很多糟糕的.bat文件,这些文件通常是独立的或堆放在某个文件夹的堆中。但PowerShell似乎非常不同。你可以很快地在其中制作糟糕的.bat文件类型的东西,或者你可以用它来构建库和复杂的服务。

我真的很喜欢在开始之前我应该​​如何开始组织这些事情。显然每个人都不一样,所以我希望能有一些讨论。谢谢!

5 个答案:

答案 0 :(得分:23)

我将我的个人脚本放在与我的个人资料相同的文件夹中。然后我可以备份&他们在一起版本。我的个人资料以:

开头
$ProfileRoot = (Split-Path -Parent $MyInvocation.MyCommand.Path)
$env:path += ";$ProfileRoot"

答案 1 :(得分:12)

使用V2,您可以在配置文件所在的WindowsPowerShell目录中创建模块目录。当您运行import-module时,PS将自动查看该目录以加载模块。我在WindowsPowerShell下创建了一个“Scripts”目录,这是一个模块的兄弟目录。

我使用我的配置文件使用以下代码的变量设置一些目录:

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

答案 2 :(得分:9)

我的建议: - 根据需要将脚本存储在目录中,例如C:\辣妹 - 将目录添加到$ 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

关于脚本组织..根据脚本的目的只有几个目录:)个人,开发,外部(下载),样本,......

答案 3 :(得分:8)

这就是我的所作所为:

注意:将“ModuleName”替换为有意义的内容。

创建一个模块并将其保存在全局模块文件夹中 “C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \模块\模块名\ ModuleName.psm1”。 e.g:

function global:FancyFunction() {
   # do something interesting here.
}

Export-ModuleMember -function FancyFunction 

打开您的powershell配置文件并添加以下行,以确保每次启动PowerShell会话时都加载模块:

Import-Module ModuleName -Force

您可以通过输入以下内容轻松找到您的powershell配置文件:

notepad $profile

当您打开一个新的PowerShell会话时,您应该能够从控制台或其他脚本调用您的函数,而无需执行任何其他操作。

答案 4 :(得分:0)

powershell 7.1 中使用的 PowerShellGet 模块中有一个导出变量

$PSGetPath

它有 4 个属性

AllUsersModules    : C:\Program Files\PowerShell\Modules
AllUsersScripts    : C:\Program Files\PowerShell\Scripts
CurrentUserModules : C:\Users\username\Documents\PowerShell\Modules
CurrentUserScripts : C:\Users\username\Documents\PowerShell\Scripts

您可以使用这些脚本位置之一。 Install-Script 也在使用它们。