当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 脚本 - 终极入门指南

作者:精品下载站 日期:2024-12-14 03:43:49 浏览:14 分类:玩电脑

PowerShell 脚本 - 终极入门指南


自动化日常任务、从系统中提取信息或管理 Microsoft 365? PowerShell 脚本确实使您的日常工作变得更加轻松。当您从事 IT 工作时,您就无法回避 PowerShell。

PowerShell 是一种高级命令行界面 (CLI) 和脚本语言,可在 Windows、Linux 和 macOS 上使用。借助 cmdlet,我们可以执行从 Active Directory 检索用户或测试服务器的网络连接等任务。我们可以将这些任务和流程组合成脚本,可以在多台计算机上快速运行或安排为日常任务。

在本文中,我将解释如何创建自己的 PowerShell 脚本。您可以使用哪些工具、如何格式化脚本以及一些通用的入门技巧。在本文末尾,您还将找到可用于脚本的模板。

PowerShell 编辑器

大多数开始编写 PowerShell 脚本的人都使用简单的记事本工具,例如 Notepad++。它适用于小型脚本,但一个好的编辑器可以使编写 PowerShell 脚本变得更加容易。它们带有语法高亮、自动完成功能、错误检测等功能。我最喜欢的是你可以创建一个项目,允许你在文件之间快速切换,并使你的文件井井有条。

对于 PowerShell,最好的免费编辑器之一是 Visual Studio Code。该编辑器来自 Microsoft,完全免费,可在 Windows、Linux 和 macOS 上使用。要将编辑器与 PowerShell 一起使用,您需要安装插件(扩展)。

  1. 首先,使用安装程序安装 Visual Studio Code。只需在所有屏幕上单击“下一步”即可。
  2. 点击扩展
  3. 搜索PowerShell
  4. 安装Microsoft 的 PowerShell 扩展

[玩转系统] PowerShell 脚本 - 终极入门指南

要创建第一个 PowerShell 脚本,我们需要创建一个新文件。为了保持组织性,我们将创建一个新文件夹“scripts”,用于存储文件。在 Visual Studio 代码中:

  1. 打开资源管理器
  2. 选择打开文件夹
  3. 例如,在 OneDrive 中创建一个新文件夹脚本
  4. 点击选择文件夹

如果您信任此文件夹中的文件,您将收到提示,请确保选中“信任父文件夹中所有文件的作者”,然后单击是,我信任作者。

[玩转系统] PowerShell 脚本 - 终极入门指南

要创建新文件,请右键单击编辑器(或单击“新建文件”图标)并创建您的第一个 PowerShell 脚本。当然,您还可以创建一个子文件夹来组织脚本。

[玩转系统] PowerShell 脚本 - 终极入门指南

运行 PowerShell 脚本

在我们开始编写 PowerShell 脚本之前,最好了解如何运行或测试脚本。当您尝试运行脚本时,常见问题之一是错误“在此系统上禁用运行脚本”。要解决此问题,我们必须更改 Windows 10 或 11 计算机上的执行权限。

打开 PowerShell 并键入以下命令以更改执行策略。在本文中阅读有关 PowerShell 执行策略的更多信息。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

# Verify the setting with
Get-ExecutionPolicy

设置执行策略后,我们可以运行脚本而不会出现任何权限错误。现在有多种选项可以运行 PowerShell 脚本,请在本文中阅读有关它们的更多信息,但对于本指南,我们将重点关注以下两个:

  • 使用 Visual Studio Code 中的内置终端
  • 在 PowerShell 中运行脚本

使用 Visual Studio 代码

使用 Visual Studio Code 作为 PowerShell 脚本编辑器的优点之一是可以在内置终端中测试和运行脚本。您可以按F5运行整个脚本,也可以按F8运行选定的行。

[玩转系统] PowerShell 脚本 - 终极入门指南

使用PowerShell

另一种方法是使用 PowerShell 本身来运行脚本。打开 Windows PowerShell 或 Windows 终端(右键单击“开始”)并导航到保存脚本的文件夹。输入脚本的文件名并按 Enter 键。

[玩转系统] PowerShell 脚本 - 终极入门指南

基础知识

在 PowerShell 中使用 Cmdlet

在命令提示符中,我们有命令,它们是执行任务的内置函数(命令)。例如,如果您在命令提示符中键入hostname,它将显示您的计算机名称。或者命令 dir 将列出当前目录的内容。

[玩转系统] PowerShell 脚本 - 终极入门指南

在 PowerShell 中,我们有命令集 (cmdlet)。您可以通过命名来识别 cmdlet,因为它存在动词-名词对。此命名约定可帮助您了解特定 cmdlet 的用途。

笔记

在下面的一些示例中,我使用 Active Directory 模块中的 cmdlet。如果要按照以下步骤操作,请确保已安装该模块。运行以下命令安装模块:

Add-WindowsCapability -online -Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 ”

例如,Get-ComputerInfo cmdlet 从您的计算机获取所有计算机信息。例如,要显示文件夹的内容,我们可以使用Get-ChildItem

[玩转系统] PowerShell 脚本 - 终极入门指南

除了内置 cmdlet 之外,您还可以在 PowerShell 中安装模块。例如,这些模块可用于与 Exchange Online 或 Azure AD 配合使用。每个模块都带有自己的用于执行特定任务的 cmdlet。

PowerShell 备忘单

确保您还查看并下载了 PowerShell 备忘单

PowerShell 动词

在创建自己的 PowerShell 命令或函数时,您可以使用许多经过批准的动词。但您会遇到的最常见的动词是:

VerbActionExampleAddAdds or appends are resources to another itemAdd-MailboxPermissionClearRemoves all resources from a container, but doesn’t
delete the containerClear-HostConnectMakes a connection to another systemConnect-AzureADDisconnectBreak the connection with the other systemDisconnect-AzureADGetRetrieves data from a resourceGet-ChildItemNewCreates a new resourceNew-MailboxRemoveRemove a resource from a containerRemove-MailboxSetReplaces data in an existing resourceSet-MailboxSelectSelects a resource in a containerSelect-Object

变量

编写脚本时,您通常需要临时存储数据,以便稍后在脚本中使用它。为此,我们使用变量。在PowerShell中我们不需要初始化变量,我们可以在需要时创建它们。变量不仅可以存储数据(如字符串和整数),还可以存储 cmdlet 的完整输出。

让我们从一个简单的示例开始,我们使用之前的 Get-Computer cmdlet。该 cmdlet 返回您的计算机名称:

笔记

PowerShell脚本中#后面的内容是注释。注释用于解释函数的作用并使代码更加可靠。
hostname

# Result
LazyBook

我们不想只显示计算机名称,而是希望将计算机名称包含在一个漂亮的字符串中。在这种情况下,我们可以首先将 Get-Computername cmdlet 的结果存储到一个变量中,我们将其称为 computername。然后将此变量包含在字符串中:

# Store computer name inside the variable
$computername = hostname

# Include the variable inside the string
Write-Host "The name of your computer is $computername"

# Result
The name of your computer is LazyBook

比较运算符和 If-Else 条件

在PowerShell中,我们可以使用比较运算符来比较或查找匹配值。默认情况下,运算符不区分大小写,但您可以在运算符前添加 c 以使其区分大小写。例如:

'a-d' -eq 'LazyAdmin'
# Result
True

'a-d' -ceq 'LazyAdmin'
# Result
False

我们可以在 PowerShell 中使用的运算符有:

OperatorCounter-Part operatorDescription-eq-neEqual or not equal-gt-ltGreater or less than-geGreat than or equal to-leLess than or equal to-Like-NotLikeMatch a string using * wildcard or not-Match-NotMatchMatches or not the specified regular expression-Contains-NotContainsCollection contains a specified value or not-In-NotInSpecified value in collection or not-ReplaceReplace specified value

我们可以将这些运算符与 If-Else 语句等结合使用。 If 语句允许我们检查特定比较是否正确。根据结果,我们可以执行一段代码或跳到另一部分。

让我们再次以计算机名称为例。我们已将计算机名称存储在变量中。现在让我们检查一下计算机的名称是否是我的笔记本电脑:

$computername = hostname

# Check if the computer name equal LazyBook
if ($computername -eq 'LazyBook') {
  Write-Host "This computer is from LazyAdmin"
}else{
  Write-host "This is someone else's computer"
}

我们的计算机名称以 LT 开头表示笔记本电脑,以 PC 开头表示台式机。因此我们可以根据计算机名称来确定该设备是否是笔记本电脑。为此,我们将使用带有 类似 运算符的 if 语句。 like 运算符接受通配符,因此我们可以在这种情况下检查字符串是否以“LT”开头

$computername = hostname

# Or better is
$computername = $env:COMPUTERNAME

# Check if the computer name start with Lazy
if ($computername -like 'Lazy*') {
  Write-Host "This is a laptop"
}else{
  Write-host "This is something else"
}

通过管道传递真实结果

除了变量之外,还有另一种方法可以将数据传递到 PowerShell 中的另一个 cmdlet,即使用管道运算符 | 。管道运算符将命令的结果传递给下一个命令。 管道最常见的示例是格式化或选择 cmdlet 的结果。

我们以下面的示例为例,cmdlet Get-NetIPAddress 返回所有网络接口的 IP 地址配置。默认情况下,它将以列表格式返回结果

Get-NetIPAddress

[玩转系统] PowerShell 脚本 - 终极入门指南

为了使结果更具可读性,我们可以将结果格式化为平板电脑或仅选择我们需要的属性。我们通过在其后面传输 cmdlet format-table (ft) 或 cmdlet select-object (select) 来实现此目的:

Get-NetIPAddress | FT

# Or select the fields
Get-NetIPAddress | Select InterfaceAlias, IPAddress, PrefixOrigin

[玩转系统] PowerShell 脚本 - 终极入门指南

现在,这是管道 cmdlet 的一个简单示例。但让我们看一下管道 cmdlet 的更高级用法。我们将收集所有用户邮箱,从每个邮箱中查找邮箱统计信息,仅选择我们需要的字段,并将结果导出到 CSV 文件。如果没有管道运算符,我们需要编写类似于以下的代码:

笔记

Get-EXOMailbox cmdlet 是 Exchange Online 模块的一部分。如果您想按照以下步骤操作,请确保您已安装它。
$mailboxes = Get-EXOMailbox -RecipientTypeDetails UserMailbox

$mailboxes.ForEach({
  $Mailboxstats = Get-EXOMailboxStatistics -Identity $_.Identity
  $fields = Select-Object -InputObject $Mailboxstats -Property DisplayName,ItemCount,TotalItemSize
  Export-CSV -InputObject $fields -Path c:\temp\file.csv -Append
})

但通过 PowerShell 中的管道,我们可以简单地执行以下操作:

Get-EXOMailbox -RecipientTypeDetails UserMailbox | Get-EXOMailboxStatistics | Select DisplayName, ItemCount, TotalItemSize | Export-CSV c:\temp\filename.csv

在数组和哈希表中存储数据

数组和哈希表可用于存储数据集合。哈希表使用键值原则,您需要先定义键,然后才能存储值。数组使用自动生成的索引来存储值。

要创建一个数组,我们可以简单地将多个值分配给一个变量,并用公共点分隔每个值。例如:

# Create an array of fruits
$array = 'apple','raspberry','kiwi'

另一种选择是首先初始化数组,然后再向数组添加值。要创建一个空数组,我们将使用 @ 符号后跟括号:

# Create an empty array
$fruits = @()

# Add content to the array
$fruits += "apple"

哈希表也称为关联数组,当您需要以更结构化的方式存储数据时使用它们。它不是基于编号索引,而是基于键值对,您需要自己定义键。要创建空哈希表,您需要使用大括号和 @ 符号:

# Create empty hashtable
$hashTable = @{}

例如,您可以使用哈希表来存储服务器 IP 地址

$serverIps= @{
  'la-srv-lab02' = '192.168.10.2'
  'la-srv-db01' = '192.168.10.100'
}

# Result
Name                           Value
----                           -----
la-srv-lab02                   192.168.10.2
la-srv-db01                    192.168.10.100

或者作为脚本中的配置文件:

$mail = @{
  SmtpServer  = 'smtp.contoso.com'
  To          = '[email protected]'
  From        = '[email protected]'
  Subject     = 'super long subject goes here'
  Body        = 'Test email from PowerShell'
  Priority    = High
}

使用 Foreach 和 Do-While 循环数据

循环数据是任何脚本语言中的常见任务之一。 ForEach 循环允许您遍历集合中的每个项目并对该项目执行某些操作。例如,我们获取水果数组并将每个项目(水果)写入控制台:

$fruits = @('apple','pear','banana','lemon','lime','mango')

# Foreach block
Foreach ($fruit in $fruits) {
    Write-Host $fruit;
}

# Shorthand
$fruits.foreach( {
    Write-Host $_;
})

在上面的示例中,我们仅使用了一个简单的数组,但您也可以对对象使用 ForEach。在 ForEach 块内,您可以访问对象的每个属性,例如,如果我们获取所有邮箱,则可以按如下方式访问显示名称:

$mailboxes = Get-EXOMailbox -RecipientTypeDetails UserMailbox

$mailboxes.ForEach({ 
  # Write the displayname of each mailbox
  Write-host $_.DisplayName
})

除了 ForEach 循环之外,我们还可以使用 While Do-While 循环。 while 循环仅在满足条件时运行,而只要条件为真,Do-While 总是运行一次。

# Do While loop
Do {
    Write-Host "Online"
    Start-Sleep 5
}
While (Test-Connection -ComputerName 8.8.8.8 -Quiet -Count 1)

Write-Host "Offline"

# While loop
$i = 0;
$path = "C:\temp"

While ($i -lt 10) {
    # Do Something
    $newFile = "$path\while_test_file_" + $i + ".txt";
    New-Item $newFile
    $i++;
}

在本文中了解有关 For 循环、ForEach 语句和 Do While 循环的更多信息。

使用 Try-Catch 捕获错误

Try-catch 块用于以正确的方式处理错误。通常,当函数不起作用或遇到错误时,脚本将简单地停止并抛出错误。有时这很好,但在其他情况下,您可能想显示更具可读性的错误或只是继续。

例如,当您使用 ForEach 循环更新 Active Directory 中的多个用户时。当其中一个用户帐户不存在时,脚本将遇到错误并停止。但更好的解决方案是,脚本输出未更新的用户名,然后继续下一个。这就是 Try-Catch 块的用武之地。

以上面的示例为例,以下代码块将尝试查找并更新 Azure AD 用户,如果 Try 块中发生错误,则 Catch 部分将显示错误。

$users.ForEach{
  Try{
    # Find the user to update
    $ADUser = Get-AzureAdUser -SearchString $_.name
    
    # Update the job title
    Set-AzureAdUser -ObjectId $ADUser.ObjectId -JobTitle $_.jobtitle
  }
  Catch{
    Write-Host ("Failed to update " + $($_.name)) -ForegroundColor Red
  }
}

现在,这是 try-catch 块的基本实现,甚至可以在单个 Try 语句上使用多个 catch 块,从而允许您捕获不同的错误。在这篇深入的文章中阅读有关 Try-Catch 块的更多信息。

创建 PowerShell 脚本

您现在应该简要了解可以在 PowerShell 中使用哪些工具来创建脚本。那么让我们看看如何将其结合到真正的 PowerShell 脚本中。对于下面的示例,我们将创建一个小脚本,在给定文件夹中创建测试文件。

下面您将了解该脚本的基本原理。我们有一个在脚本中硬编码的路径、一个包含数字 1 到 10 的数组以及一个 ForEach 循环。通过下面的示例,我们将将此脚本增强为真正的 PowerShell 脚本。

$path = "C:\temp"

1..10 | ForEach-Object {
    $newFile = "$path\test_file_$_.txt";
    New-Item $newFile
}

记录和评论

创建 PowerShell 脚本时,向脚本添加文档始终是个好主意。该文档位于脚本顶部的注释块中,描述了脚本的功能、一些有关如何使用脚本的示例以及包含作者、版本、日期等的注释块。

因此,对于我们的测试文件脚本,我们可以在文件的开头添加以下描述:

<#
  .SYNOPSIS
  Create test files in given directory

  .DESCRIPTION
  The script generates an x amount of text file based test file in the given folder. The files don't
  contain any content.

  .EXAMPLE
  CreateTestFiles.ps1 -path c:\temp -amount 50

  Create 50 files in c:\temp
  
  .NOTES
  Version:        1.0
  Author:         R. Mens - LazyAdmin.nl
  Creation Date:  04 oct 2022
  Modified Date:  
  Purpose/Change: Init
  Link:           https://a-d.site/powershell/powershell-scripting
#>

如果您现在在 PowerShell 中运行命令 Get-Help,后跟脚本名称,您将获得脚本的解释:

[玩转系统] PowerShell 脚本 - 终极入门指南

在 PowerShell 最佳实践指南中阅读有关评论和文档的更多信息

Cmdlet 参数

使用 PowerShell cmdlet 时,您可能已经注意到它们中的大多数都带有我们可以设置的参数。例如,当您想要从 Exchange Online 获取邮箱时,可以使用参数 -Identity 指定用户名。我们可以通过定义参数属性在我们自己的 PowerShell 脚本中执行相同的操作。

在上面的示例中,我们对路径变量进行了硬编码。如果您想在不同的目录中创建测试文件,则需要更改脚本。更好的选择是如果您可以从命令行设置路径。因此,我们将创建一个参数块,其中包含参数路径:

param(
  [Parameter()]
  [string]$path
)

# Create files
1..10 | ForEach-Object {
    $newFile = "$path\test_file_$_.txt";
    New-Item $newFile
}

我们期望路径是一个字符串,其他选项是,例如,一个开关,您可以在其中选择一个值或一个整数。如果你打开PowerShell并输入脚本文件名,那么你还可以添加-path参数:

[玩转系统] PowerShell 脚本 - 终极入门指南

但是如果脚本的用户没有设置路径怎么办?在这种情况下,路径是强制性的,没有它,测试文件将在脚本的根位置创建。为了使其强制执行,我们添加参数属性 Mandatory 并将其设置为 true。另一个选项是设置默认值:

param(
  [Parameter(
    Mandatory = $true,
    HelpMessage = "Enter path were test files should be created"
  )]
  [string]$path,

  [Parameter(
    HelpMessage = "How many files should be created"
  )]
  [int]$amount = 10
)

读取主机

我们的脚本将在给定文件夹中创建文本文件。例如,如果用户输入错误,则脚本可能会创建 1000 个文件,而不是 100 个。因此,在我们创建文件之前,最好请求确认。为此,我们将使用 Read-Host cmdlet。

Read-Host 用于提示用户输入。例如,这可以是字符串或密码。输入的结果可以通过简单的比较来验证。在这种情况下,我们首先将用户通过参数放弃的值写入控制台,然后询问用户是否要继续:

# Ask for confirmation
Write-host "Creating $amount test files in $path" -ForegroundColor Cyan
$reply = Read-Host -Prompt "Is this correct? [Y] Yes [N] No "

# Check the reply and create the files:
if ( $reply -match "[yY]" ) { 
    # Create files
    1..10 | ForEach-Object {
      $newFile = "$path\test_file_$_.txt";
      New-Item $newFile
    }
}

[玩转系统] PowerShell 脚本 - 终极入门指南

功能

函数是在脚本中组织和重用代码片段的好方法。函数应该执行单个任务。您可以在此 OneDrive 大小报告脚本中找到一个很好的示例。函数ConvertTo-Gb 接受一个值并将其转换为千兆字节并返回结果。如果在脚本中向下滚动一点,您将看到函数 Get-OneDriveStats 收集所有 OneDrive 并处理它们。在 ForEach 循环内,我使用 ConvertTo-GB 函数转换值。

函数的结构基本上是一个小脚本。我们从简短的描述、概要开始。如果我们需要将值传递给脚本,我们将使用参数。您可能还注意到,某些函数有 3 个代码块:开始、过程和结束。对于传递给函数的所有值,都会执行 process 块,而 begin 和 end 块仅执行一次。现在我不得不说我不经常使用begin和end。

因此,我们将为测试文件脚本创建一个简单的函数。我还在函数中添加了参数 Path 。这并不是真的必要,因为该函数还可以访问我们在脚本开头设置的参数。 (这更多的是为了展示可能性)

Function New-TestFiles{
  <#
    .SYNOPSIS
        Create test files
  #>
  param(
    [Parameter(Mandatory = $true)]
    [string]$path
  )
  1..$amount | ForEach-Object {
    $newFile = "$path\test_file_$_.txt";
    New-Item $newFile
  }
}

我们现在可以在脚本中使用该函数,如下所示:

if ( $reply -match "[yY]" ) { 
    New-TestFiles -path $path
}

断点

创建 PowerShell 脚本时很容易出现拼写错误、忘记引用或小错误。这就是为什么在编写脚本时不断测试脚本很重要。但即便如此,有时也很难找到脚本中错误的原因。

为了帮助您查找脚本中的错误,您可以使用断点。如果您使用的是 Visual Studio Code,则可以使用内置的运行和调试功能,允许您设置行断点并逐行运行脚本。

在 Visual Studio 代码中,我们可以通过单击行号前面的红点来设置断点。在下面的屏幕截图中,我在第 46 行的 New-Item cmdlet 上设置了断点 (1)。当我们单击“运行”时 (2)脚本将被执行并在第46行的断点处停止。此时,我们可以看到左侧的变量(3)。这告诉我们,ForEach-Object 循环位于第一项,并且将在 c:\temp\files 中创建名为 test_file_1 的新文件.txt

[玩转系统] PowerShell 脚本 - 终极入门指南

通过顶部的按钮(5),我们可以移动到下一步、跳过一步等。

在 PowerShell 中使用断点

调试 PowerShell 脚本的另一个选项是在控制台中使用 cmdlet Set-PSBreakpoint。此 cmdlet 允许您为要在 PowerShell 中运行的任何脚本设置断点。使用 cmdlet,我们可以在行号、操作或变量上设置断点。因此,让我们设置与 Visual Studio Code 中相同的断点:

# Set the breakpoint on line 46 for the script CreateTestFiles.ps1
Set-PSBreakPoint -Script .\CreateTestFiles.ps1 -Line 46

当我们现在运行脚本时,它将停在第 46 行:

[玩转系统] PowerShell 脚本 - 终极入门指南

脚本已停止,但没有显示任何内容。因此,我们将首先显示断点周围的代码。只需在控制台中输入字母 L:

[玩转系统] PowerShell 脚本 - 终极入门指南

第 46 行的星号表示我们设置的断点。如果我们想知道路径变量是什么,或者新的文件名,我们可以简单地在控制台中输入变量名并按回车键:

[玩转系统] PowerShell 脚本 - 终极入门指南

我们可以查看使用 cmdlet Get-PSBreakpoint 设置的所有断点,并使用 Remove-PSBreakpoint 删除它们。结合两者将删除所有断点:

Get-PSBreakPoint | Remove-PSBreakpoint

总结

创建 PowerShell 脚本时,始终从小处开始并经常测试脚本。另外,请确保在必要时向代码添加注释。现在可能很清楚这些代码是什么,但如果一年后您需要编辑脚本,有时可能会很难弄清楚脚本的作用及其工作原理。

如果您想了解有关 PowerShell 的更多信息,那么下面的书确实是一本不错的读物。这是学习 PowerShell 时最畅销的书籍之一:

[玩转系统] PowerShell 脚本 - 终极入门指南

  • 特拉维斯·普朗克 (作者)
  • 英语(出版语言)
  • 360 页 - 04/26/2022(出版日期) - 曼宁(出版商)

[玩转系统] PowerShell 脚本 - 终极入门指南

在上面的示例中,我们创建了一个用于创建测试文件的小脚本,下面您将找到完整的脚本。如前所述,对于这样一个简单的任务来说,这有点大材小用,但它让您了解如何构建脚本。

<#
  .SYNOPSIS
  Create test files in given directory

  .DESCRIPTION
  The script generates an x amount (by default 10) of text file based test file in the 
  given folder. The files don't contain any content.

  .EXAMPLE
  CreateTestFiles.ps1 -path c:\temp -amount 50

  Create 50 files in c:\temp

  .NOTES
  Version:        1.0
  Author:         R. Mens - LazyAdmin.nl
  Creation Date:  04 oct 2022
  Modified Date:  
  Purpose/Change: Init
  Link:           https://a-d.site/powershell/powershell-scripting
#>

param(
  [Parameter(
    Mandatory = $true,
    HelpMessage = "Enter path were test files should be created"
  )]
  [string]$path,

  [Parameter(
    HelpMessage = "How many files should be created"
  )]
  [int]$amount = 10
)

Function New-TestFiles{
  <#
    .SYNOPSIS
        Create test files
  #>
  param(
    [Parameter(Mandatory = $true)]
    [string]$path
  )
  1..$amount | ForEach-Object {
    $newFile = "$path\test_file_$_.txt";
    New-Item $newFile
  }
}

# Ask for confirmation
Write-host "Creating $amount test files in $path" -ForegroundColor Cyan
$reply = Read-Host -Prompt "Is this correct? [Y] Yes [N] No "

if ( $reply -match "[yY]" ) { 
    New-TestFiles -path $path
}

我希望这篇文章对您有用,如果您有任何疑问,请在下面发表评论。如果您喜欢,请分享!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯