[玩转系统] 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 一起使用,您需要安装插件(扩展)。
- 首先,使用安装程序安装 Visual Studio Code。只需在所有屏幕上单击“下一步”即可。
- 点击扩展
- 搜索PowerShell
- 安装Microsoft 的 PowerShell 扩展
要创建第一个 PowerShell 脚本,我们需要创建一个新文件。为了保持组织性,我们将创建一个新文件夹“scripts”,用于存储文件。在 Visual Studio 代码中:
- 打开资源管理器
- 选择打开文件夹
- 例如,在 OneDrive 中创建一个新文件夹脚本
- 点击选择文件夹
如果您信任此文件夹中的文件,您将收到提示,请确保选中“信任父文件夹中所有文件的作者”,然后单击是,我信任作者。
要创建新文件,请右键单击编辑器(或单击“新建文件”图标)并创建您的第一个 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 本身来运行脚本。打开 Windows PowerShell 或 Windows 终端(右键单击“开始”)并导航到保存脚本的文件夹。输入脚本的文件名并按 Enter 键。
基础知识
在 PowerShell 中使用 Cmdlet
在命令提示符中,我们有命令,它们是执行任务的内置函数(命令)。例如,如果您在命令提示符中键入hostname
,它将显示您的计算机名称。或者命令 dir
将列出当前目录的内容。
在 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
。
除了内置 cmdlet 之外,您还可以在 PowerShell 中安装模块。例如,这些模块可用于与 Exchange Online 或 Azure AD 配合使用。每个模块都带有自己的用于执行特定任务的 cmdlet。
PowerShell 备忘单
确保您还查看并下载了 PowerShell 备忘单PowerShell 动词
在创建自己的 PowerShell 命令或函数时,您可以使用许多经过批准的动词。但您会遇到的最常见的动词是:
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 中使用的运算符有:
我们可以将这些运算符与 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
为了使结果更具可读性,我们可以将结果格式化为平板电脑或仅选择我们需要的属性。我们通过在其后面传输 cmdlet format-table (ft)
或 cmdlet select-object (select)
来实现此目的:
Get-NetIPAddress | FT
# Or select the fields
Get-NetIPAddress | Select InterfaceAlias, IPAddress, PrefixOrigin
现在,这是管道 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 最佳实践指南中阅读有关评论和文档的更多信息
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参数:
但是如果脚本的用户没有设置路径怎么办?在这种情况下,路径是强制性的,没有它,测试文件将在脚本的根位置创建。为了使其强制执行,我们添加参数属性 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
}
}
功能
函数是在脚本中组织和重用代码片段的好方法。函数应该执行单个任务。您可以在此 OneDrive 大小报告脚本中找到一个很好的示例。函数ConvertTo-G
b 接受一个值并将其转换为千兆字节并返回结果。如果在脚本中向下滚动一点,您将看到函数 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
通过顶部的按钮(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 行:
脚本已停止,但没有显示任何内容。因此,我们将首先显示断点周围的代码。只需在控制台中输入字母 L:
第 46 行的星号表示我们设置的断点。如果我们想知道路径变量是什么,或者新的文件名,我们可以简单地在控制台中输入变量名并按回车键:
我们可以查看使用 cmdlet Get-PSBreakpoint 设置的所有断点,并使用 Remove-PSBreakpoint 删除它们。结合两者将删除所有断点:
Get-PSBreakPoint | Remove-PSBreakpoint
总结
创建 PowerShell 脚本时,始终从小处开始并经常测试脚本。另外,请确保在必要时向代码添加注释。现在可能很清楚这些代码是什么,但如果一年后您需要编辑脚本,有时可能会很难弄清楚脚本的作用及其工作原理。
如果您想了解有关 PowerShell 的更多信息,那么下面的书确实是一本不错的读物。这是学习 PowerShell 时最畅销的书籍之一:
- 特拉维斯·普朗克 (作者)
- 英语(出版语言)
- 360 页 - 04/26/2022(出版日期) - 曼宁(出版商)
在上面的示例中,我们创建了一个用于创建测试文件的小脚本,下面您将找到完整的脚本。如前所述,对于这样一个简单的任务来说,这有点大材小用,但它让您了解如何构建脚本。
<#
.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
}
我希望这篇文章对您有用,如果您有任何疑问,请在下面发表评论。如果您喜欢,请分享!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag