为啥在powershell中使用touch命令会显示错误?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥在powershell中使用touch命令会显示错误?相关的知识,希望对你有一定的参考价值。

touch 是Linux下的命令,在PowerShell中请使用ni或New-Item。

PS > ni tests\\__init__.py

另外,Windows下的路径是反斜线(backward slash,\\)分割,不是Linux下的斜线(slash,/),虽然用斜线在很多场景下可以正常使用。

参考技术A touch是linux的命令, 不是powershell的追问

那在window系统下如何输入达到相似的目的呢,谢谢!

追答

没有
如果是新建的话, 可以用echo或者new-item, 如果要更新时间戳的话就设置一下LastWriteTime属性. 你可以自己写个脚本来当作touch命令, 但还不如装个bash直接用linux命令, 如果不是非要用PS的话

为啥不能使用 VariablesToExport 导出 PowerShell 模块中的变量成员?

【中文标题】为啥不能使用 VariablesToExport 导出 PowerShell 模块中的变量成员?【英文标题】:Why can't export variable members in a PowerShell module using VariablesToExport?为什么不能使用 VariablesToExport 导出 PowerShell 模块中的变量成员? 【发布时间】:2021-10-29 16:28:28 【问题描述】:

How to Write a PowerShell Module Manifest - PowerShell了解到,我可以使用VariablesToExport = '*'导出模块中的所有变量。

但是使用后发现无法导出任何变量。

在编写测试确认并阅读更多文档后,我没有找到问题的原因。我可能忽略了一些重要的事情。

这是怎么回事?

# TestModule.psm1 excerpt:
0..9 | ForEach-Object  New-Variable -Name "v_$_" -Value $_ 

# TestModule.psd1 excerpt:
@ModuleVersion = '1.0';RootModule = 'TestModule.psm1';VariablesToExport = '*'

# TestModule.Tests.ps1(Module has been imported)
 # Confirm that the module has indeed been imported.
$ModuleName | Get-Module | ForEach-Object 'name' | Should -Be $ModuleName
 # All variables do not exist.
0..9 | ForEach-Object  "variable:v_$_" | Test-Path | Should -BeFalse 

【问题讨论】:

【参考方案1】:

这远非显而易见,但是,从 PowerShell 7.2 开始,为了从 PowerShell module 导出 变量,将它们列在模块 manifest 的 (@ 987654329@ 文件)VariablesToExport 条目 单独 不够

需要在您的脚本模块文件中调用Export-ModuleMember-Variable (*.psm1) - 请务必将它放在文件的结尾,以确保所有要导出的定义都已经完成。

警告

一旦*.psm1模块调用Export-ModuleMember所有要导出的定义必须显式导出;-Function,@ 987654337@ 和 -Alias 参数也必须酌情指定;在所有情况下,* 都可以用于指定给定类型的所有定义,也可以使用更具体的wildcard 名称模式。

例如,要导出所有 $v_* 变量以及与名称模式 *-Foo* 匹配的所有函数,请将以下内容放在 *.psm1 文件的底部:

Export-ModuleMember -Variable v_* -Function *-Foo*

重要

对于具有模块清单 (*.psd1) 和脚本模块 (*.psm1) 的模块,导出逻辑是一个 两个 步骤的过程

候选导出定义是从*.psm1本身导出的所有定义 - 隐式,或明确Export-ModuleMember声明。

隐式导出 - 即在没有Export-ModuleMember 调用的情况下执行的自动导出 - 包括所有函数别名,但不是变量

奇怪的是,对于 动态 模块 - 使用 New-Module 创建的内存模块 - 仅是函数

与导出相关的清单 (*.psd1) 条目 - FunctionsToExportAliasesToExportVariablesToExportCmdletsToExport 仅适用于导出的 二进制 cmdlet from assemblies) - 进一步过滤这些候选导出,过滤后的结果是模块的有效导出。 p>

注意:正如新生成的模块清单中的 cmets 建议的那样,应在清单中避免使用诸如'*' 之类的通配符模式,因为它们会减慢auto-loading modules 的命令发现速度;定义应按其全名一一列举。

调试提示

要查看给定模块导出了哪些定义,请使用-Verbose 开关调用Import-Module

Importing ... 行是导入到调用者作用域的导出定义。 如果*.psm1 文件调用Export-ModuleMember,您还将看到上面描述的两步过程:Exporting ...Importing ... 之前的行描述了隐式候选导出。

要在修改其定义后强制重新导入已导入的模块,请使用-Force 开关调用Import-Module

【讨论】:

上述文档的解释比较晦涩,有这个文档会好很多。 docs.microsoft.com/zh-cn/powershell/module/…

以上是关于为啥在powershell中使用touch命令会显示错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Sencha Touch cmd 中没有视图构建

为啥表上存在主键会显着提高列存储索引的性能?

为啥从 powershell 命令行连接到 github 时出错?

为啥删除 ORDER BY 会显着加快此查询的速度?

为啥通过引用传递数组元素会显式导致 IL 中的赋值操作?

为啥我的Windows powershell读取结果有一堆90m