假设您是一名系统管理员,他使用PowerShell管理他/她的系统上的很多东西.
你可能已经编写了很多函数来执行你经常需要检查的东西.但是,如果你需要移动很多,使用不同的机器等等,你必须一次又一次地重新输入所有功能才能使用它们.每次我因为某些原因退出并重新启动PowerShell时,我甚至必须这样做,因为它不会记住功能......
我写了一个功能,为我做这个.我在这里发帖是因为我想确定它是万无一失的.函数本身存储在allFunctions.ps1,这就是我在代码中排除它的原因.
基本思想是你有一个文件夹,你可以在其中存储所有ps1文件,每个文件都包含一个函数.在PowerShell中,您转到该目录,然后输入:
. .\allFunctions.ps1
Run Code Online (Sandbox Code Playgroud)
该脚本的内容是这样的:
[string]$items = Get-ChildItem -Path . -Exclude allFunctions.ps1
$itemlist = $items.split(" ")
foreach($item in $itemlist)
{
. $item
}
Run Code Online (Sandbox Code Playgroud)
此脚本将首先收集目录中的每个文件,这意味着您可能还拥有所有非ps1文件.将排除allFunctions.ps1.
然后我根据空格拆分长字符串,这是常用的分隔符.然后我用Foreach循环遍历它,每次将函数初始化为PowerShell.
假设你有超过100个功能,你永远不知道你需要哪些功能,哪些不会?为什么不输入所有而不是挑剔?
所以我想知道,这里会出现什么问题?我希望这是非常安全的,因为我可能会使用它很多.
aph*_*ria 15
将它们包含在PowerShell配置文件中,以便每次启动PS时它们都会自动加载.
查看Windows PowerShell配置文件,了解有关在何处查找配置文件脚本的详细信息.
PS将您的个人资料默认为"我的文档"文件夹.我的网络驱动器,所以我登录的任何地方,PowerShell指向相同的配置文件夹.
Jas*_*her 11
您可以以更简单的方式执行此操作.我在我的个人资料中有这个:
##-------------------------------------------
## Load Script Libraries
##-------------------------------------------
Get-ChildItem ($lib_home + "*.ps1") | ForEach-Object {& (Join-Path $lib_home $_.Name)} | Out-Null
Run Code Online (Sandbox Code Playgroud)
其中$ lib_home是一个存储我想要自动包含的脚本的文件夹.在这种情况下,它执行它们.所以我有脚本定义全局函数.你也可以点源它们(用"."代替"&").
功能明智我认为有几种方法可以改进你的脚本.
首先,您的脚本依赖于脚本名称不变.虽然我不认为你可能会改变这个剧本的名字,但你永远不会知道从现在起几年后你会有什么样的心情.相反,为什么不动态地计算脚本的名称.
$scriptName = split-path -leaf $MyInvocation.MyCommand.Definition
Run Code Online (Sandbox Code Playgroud)
下一个问题是,如果您将目录放在包含空格的路径中,我相信您的拆分功能将失败.这将导致像"c:\ foo bar\baz.ps1"这样的路径显示为"c:\ foo","bar\baz.ps1".删除拆分更好,只需使用get-childitem命令进行枚举即可.
此外,您依赖当前路径作为包含脚本的路径.你应该使它成为一个显式参数或使用包含allFunctions.ps1文件的路径(我更喜欢后者)
这是我将使用的更新版本.
$scriptName = split-path -leaf $MyInvocation.MyCommand.Definition
$rootPath = split-path -parent $MyInvocation.MyCommand.Definition
$scripts = gci -re $rootPath -in *.ps1 | ?{ $_.Name -ne $scriptName }
foreach ( $item in $scripts ) {
. $item.FullName
}
Run Code Online (Sandbox Code Playgroud)
从安全角度来看,您必须考虑恶意用户将坏脚本添加到目标目录的可能性.如果他们这样做,它将使用您的allFunctions.ps1文件执行,并可能对计算机造成损害.但是在恶意用户可以访问您的文件系统的时候,他们可能会在没有您的脚本帮助的情况下造成损害,所以这可能是一个小问题.
| 归档时间: |
|
| 查看次数: |
31022 次 |
| 最近记录: |