每当我需要引用一个公共模块或脚本时,我喜欢使用相对于当前脚本文件的路径,这样,我的脚本总能找到库中的其他脚本.
那么,确定当前脚本目录的最佳标准方法是什么?目前,我正在做:
$MyDir = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)
Run Code Online (Sandbox Code Playgroud)
我知道在模块(.psm1)中你可以使用它$PSScriptRoot来获取这些信息,但这不会在常规脚本(即.ps1文件)中设置.
获取当前PowerShell脚本文件位置的规范方法是什么?
我有一个PowerShell脚本D:\temp.
当我运行此脚本时,我希望列出该文件的当前位置.我该怎么做呢?
例如,此代码将在DOS批处理文件中完成; 我想将其转换为PowerShell脚本...
FOR /f "usebackq tokens=*" %%a IN ('%0') DO SET this_cmds_dir=%%~dpa
CD /d "%this_cmds_dir%"
Run Code Online (Sandbox Code Playgroud) (我不敢相信我实际上是在问这个问题,但是我当天没有脑力.)
我刚刚写了我的第一个严肃的PowerShell脚本,我真的很高兴.我计划每天使用它.我希望能够从Posh命令行调用它.我会给它一个动词 - 名词类型的名字,但是现在它是一个简单的.ps1,而不是那些采用params等的高级函数之一.
那么它应该去哪里以及如何从Posh命令行调用它?我打算写更多!他们应该去哪儿?
你们在哪里放置PowerShell脚本以及如何组织它们?我在制作C#和C++工具方面有很多经验,知道如何命名它们以及放置它们的位置.而在另一个极端我已经做了很多糟糕的.bat文件,这些文件通常是独立的或堆放在某个文件夹的堆中.但PowerShell似乎非常不同.你可以非常快速地制作糟糕的.bat文件类型的东西,或者你可以用它来构建库和复杂的服务.
我真的很喜欢在开始之前我应该如何开始组织这些事情的一些想法.显然每个人都不一样,所以我希望能有一些讨论.谢谢!
我有以下目录树:
e:\powershell\services\This-Script-Here-Should-Call-Press any key to continue.ps1
e:\powershell\utils\Press any key to continue.ps1
Run Code Online (Sandbox Code Playgroud)
现在我想调用一个名为"按任意键继续.ps1"的脚本,它位于"utils"文件夹中,来自我在"services"文件夹中的脚本.我怎么做?我无法弄清楚相对路径.
我试着这样做:
"$ '.\..\utils\Press any key to continue.ps1'"
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我目前正在研究一些脚本,这些脚本可以自动化很多东西并且中等大小.我已经开始关注某些事情,使我的脚本具有通用性和可移植性,如:
我最感兴趣的是知道是否有任何标准的脚本技术和指南,旨在使脚本开发人员生活简单.我在perl和powershell上工作,所以更受欢迎和赞赏的是更广泛的建议.
在此先感谢您的帮助.
steeluser
我试图在PowerGui 3.0中点源脚本文件,但我得到的只是;
术语".\ PowerShell.Common.ps1"未被识别为cmdlet,函数,脚本文件或可操作程序的名称.检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试.在D:\ TFS\SharePoint\Dev\Deploy\AutoSPInstaller\SP2010\AutoSPInstaller\AutoSPInstallerFunctionsCustom.ps1:6 char:31 +.\.PowerShell.Common.ps1 <<<< + CategoryInfo:ObjectNotFound:(.\ PowerShell.Common. ps1:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
并且powerGui随后不在所述文件中提供我的脚本功能 - 在父脚本的上下文敏感列表中.
文件"PowerShell.Common.ps1"与AutoSPInstallerFunctionsCustom.ps1位于同一目录中.感谢您的帮助