Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Vì bạn cần biết PowerShell

Này - hy vọng bạn vẫn ổn.

Tôi muốn dành một vài phút để giúp bạn bắt đầu với PowerShell, theo cách mà tôi nghĩ là ít choáng ngợp hơn so với cách tôi tìm thấy hầu hết các tài liệu PowerShell trong ngày. Bởi vì bạn đã nói với tôi rằng bạn vẫn tiếp tục nghe về PowerShell và bạn không thể biết cách truy cập vào nó.

Điều đầu tiên cần biết là nó giống như Command Prompt trên steroid, nhưng hữu ích hơn rất nhiều so với Command Prompt. Bạn sẽ thấy ý tôi ngay khi bạn mở nó ra. Hãy làm điều đó, nhưng hãy mở nó bằng cách sử dụng "Run as Administrator", vì điều đó chỉ hữu ích cho một số bản trình diễn. Trong cuộc sống thực, bạn sẽ chỉ mở nó bằng quyền Quản trị viên nếu bạn thực sự cần.

Vì vậy, hãy nhấp vào nút bắt đầu và bắt đầu nhập PowerShell. Tôi chưa muốn bạn mở ISE, chỉ cần tìm lối tắt “Windows PowerShell” và nhấp chuột phải vào đó để chọn ‘Run as Administrator’.

Bây giờ nó đang chạy, hãy ghim nó vào Thanh tác vụ của bạn để bạn có thể truy cập nó nhanh hơn vào lần sau. Nếu định sử dụng PowerShell, bạn nên mở nó ra dễ dàng.

Dù sao thì, cửa sổ đó… ngay lập tức, có vẻ như bạn cần phải có manh mối để viết. Vâng đúng vậy. Mọi thứ có thể dễ dàng hơn một chút trong ISE và Aaron Nelson (@sqlvariant) đã nói với tôi về việc không sử dụng ISE mỗi khi tôi làm bất cứ điều gì trong PowerShell, nhưng chúng tôi sẽ ổn ở đây.

Hãy bắt đầu bằng cách thực hiện một số điều cơ bản mà chúng ta biết từ DOS. Các lệnh cddir . Hãy thử điều này:

cd ..
dir

Bạn sẽ thấy rằng bạn chuyển lên C:\WINDOWS , và sau đó liệt kê các nội dung. Không có gì ngạc nhiên ở đây, nó giống như Command Prompt. Hoặc DOS nếu bạn đủ tuổi.

Sự khác biệt với PowerShell là đây không chỉ là đầu ra văn bản. Những thứ này là đối tượng . Và chúng ta có thể làm được điều đó. PowerShell là một môi trường ‘được đánh máy’. Bạn đã xử lý các đối tượng mọi lúc, như trong Object Explorer trong SSMS. Các đối tượng PowerShell có thể bao gồm tất cả những thứ đó, cũng như các đối tượng .Net. Đây là nơi PowerShell có được sức mạnh của nó.

Một vài điều nhanh chóng…

  1. Các lệnh PowerShell có trong các cặp động từ-danh từ, chẳng hạn như Set-Location hoặc Get-Content hoặc Get-ChildItem . Chúng được gọi là lệnh ghép ngắn, vì vậy khi bạn nhìn thấy từ 'cmdlet', nó chỉ có nghĩa là lệnh PowerShell.
  2. Các tham số lệnh PowerShell sử dụng dấu gạch ngang. Như:Get-ChildItem -Recurse nhưng bạn cũng có thể viết tắt chúng miễn là không có sự mơ hồ. Vì vậy, tôi có thể sử dụng -rec thay vì -recurse .
  3. Các biến bắt đầu bằng ký hiệu đô la ($ ). Chúng ta sẽ giải quyết vấn đề này sau.
  4. Chúng tôi không sử dụng > trong các bộ lọc và kiểm tra, chúng tôi sử dụng -gt . -eq cho = , -ne cho != / <> , -le cho <= , và như thế. Điều này thật khó chịu, nhưng bạn sẽ quen với nó.
  5. Có rất nhiều từ viết tắt và bí danh. Một bí danh cho Set-Locationcd . Get-ChildItem còn được gọi là dirls quá. Where-Object?ForEach-Object% . Chúng tôi sẽ thấy những điều này khi chúng tôi cũng đồng hành.
  6. Bạn hoàn thành tab ở hầu hết mọi thứ, vì vậy nếu bạn đã nhập Get-Chi , bạn có thể nhấn Tab và lướt qua các tùy chọn cho đến khi tìm thấy thứ mình muốn.
  7. Bạn có thể sử dụng trợ giúp (là bí danh của Get-Help ) bằng cách sử dụng:help dir và ở cuối phần trợ giúp đó, bạn sẽ nhận được một lời nhắc thú vị rằng bạn có thể đã sử dụng help dir -examples và thêm -online sẽ mở một trang web với trang trợ giúp có liên quan trên đó (điều đó thực sự hữu ích).
  8. Bạn có thể chuyển kết quả của thứ này sang thứ khác bằng cách sử dụng ký hiệu ống dẫn (| ). Có lẽ cái hữu ích nhất là gm (bí danh cho Get-Member ), sẽ liệt kê các Thuộc tính và Phương thức (các thành viên) cho bất kỳ đối tượng nào bạn đã chuyển vào.
  9. # sẽ nhận xét dòng hoặc chuyển giữa <##>

Chúng ta hãy xem một số điều này đang hoạt động.

Ở đây chúng ta có thể thấy một số điều thú vị. Cần lưu ý rằng chúng ta có thể sử dụng -Exclude-Include . Chúng tôi sẽ làm điều đó sớm. Chúng tôi có thể lấy thêm thông tin bằng cách sử dụng -detailed hoặc -examples hoặc -full .

Hãy khám phá thư mục SQL của chúng tôi. Bắt đầu bằng cách nhập cd \p và sau đó nhấn Tab cho đến khi nó hiển thị cho bạn Tệp chương trình.

Bây giờ nhấn M và bắt đầu nhấn lại Tab để tìm ‘Microsoft SQL Server’. Nếu bạn đi quá xa, hãy nhấn Shift-Tab để quay lại. (Ồ, và nếu bạn nên xem trên D: , sau đó bắt đầu lại với cd D:\p - nhưng các nguyên tắc đều giống nhau.)

Tuyệt quá. Hãy nhấn Enter và thấy rằng chúng tôi đã thay đổi thư mục.

Nhưng bây giờ hãy nhập:dir -rec -inc ConfigurationFile.ini

Bạn có thể nhấn Tab sau mỗi thông số và thấy chúng mở rộng thành các phiên bản chính xác hơn. Bạn có thể đã sử dụng Get-ChildItem nghiêm ngặt hơn một chút. Tôi không thực sự quan tâm mặc dù. Khi bạn chạy điều này, bạn sẽ thấy một số tệp được liệt kê. Tôi không biết bạn sẽ nhận được bao nhiêu. Mỗi cái chỉ ra rằng bạn đã chạy một cài đặt SQL Server. Nhưng là một chuyên gia SQL, bạn biết điều này. Bạn có thể không biết PowerShell có thể liệt kê chúng cho bạn dễ dàng như thế nào.

Được. Hy vọng rằng chúng tôi đang thấy một số công dụng cho việc này.

Bây giờ chúng ta hãy làm điều gì đó với đầu ra này. Tôi muốn nói "với những tệp này", nhưng chúng ta hãy làm phần dữ liệu và coi đây là tập dữ liệu của các tệp.

Giả sử chúng ta muốn đếm chúng. Tôi có thể lặp lại các kết quả bằng cách sử dụng ForEach-Object (nhưng tôi sẽ sử dụng phím tắt % ), và tăng một biến mà tôi đã thiết lập. Đây là một mô hình phổ biến để lặp lại - mọi người đặt toàn bộ chương trình bên trong các dấu ngoặc nhọn đó, trên rất nhiều dòng.

Đây là một mẹo nhỏ, nhưng tôi chắc chắn rằng có một cái gì đó được tích hợp sẵn để cho phép tôi đếm mọi thứ.

Chà, tôi không bao giờ nhớ được lệnh đó là gì, vì vậy hãy hỏi một trong những nhà cung cấp dịch vụ tìm kiếm trên internet ưa thích đó.

Tôi thậm chí không muốn mở những trang này. Tôi chỉ muốn lưu ý rằng có một lệnh được gọi là Measure-Object . Hãy đưa đầu ra của chúng tôi vào đó. Nhấn phím 'mũi tên lên' để quay lại lệnh trước đó.

Quá trình này diễn ra trong giây lát, và sau đó vui vẻ cho chúng tôi biết có ba.

Phải mất một chút thời gian vì phải tìm kiếm lại các tệp. Làm thế nào về việc chúng tôi lưu trữ những kết quả đó ở đâu đó?

Bây giờ, tôi gọi những thứ này là dấu ngoặc, nhưng người Mỹ gọi chúng là dấu ngoặc đơn. Và những gì bạn gọi là dấu ngoặc, tôi gọi là dấu ngoặc vuông. Có những dấu ngoặc nhọn quá, tôi nghĩ rằng bạn gọi là dấu ngoặc nhọn. Tôi sẽ cố gắng gọi dấu ngoặc đơn là "dấu ngoặc tròn" để tránh nhầm lẫn, nhưng nếu tôi đề cập đến "dấu ngoặc nhọn", ý tôi là dấu ngoặc đơn.

Tôi sẽ bọc dir của mình lệnh trong dấu ngoặc tròn và gán điều đó cho một biến.

Bây giờ tôi có thể chuyển $configfilelist vào Measure-Object và nó sẽ phản hồi nhanh hơn, vì tôi đã lưu trữ kết quả của mình.

Nhưng vì $configfilelist là một mảng các tệp, tôi cũng có thể nhìn vào độ dài của nó để thấy rằng có ba mục. Đó là cách dễ dàng hơn. Và tôi có thể truy cập từng cá nhân bằng cách sử dụng dấu ngoặc vuông từ 0 đến 2.

Đây vẫn chưa phải là thứ mang tính đột phá. Nhưng những tập tin đó cho chúng ta biết một số điều hữu ích. Hãy làm một Get-Member lệnh trên mảng của chúng tôi.

Đừng làm điều này khó chịu. Ở trên cùng, chúng ta có thể thấy rằng chúng ta đang xử lý các đối tượng thuộc loại System.IO.FileInfo . Đây là một thứ .Net và là nơi sức mạnh đến từ. Chúng ta có thể thấy rằng chúng ta có thể gọi Delete phương thức của các tệp này hoặc CopyTo hoặc Decrypt (nếu chúng đã được mã hóa, nhưng chúng không được mã hóa) và hơn thế nữa. Ở dưới cùng, chúng ta thấy Thuộc tính.

Điều này là thú vị hơn. Hãy xem LastWriteTime . Bởi vì chúng tôi có thể quan tâm đến thời điểm đó.

Chúng ta có thể sử dụng Select-Object để chỉ hiển thị các thuộc tính nhất định.

Như mong đợi, không có gì được ghi vào các tệp đó vì quá trình cài đặt đã thực sự được thực hiện. Nhưng điều gì sẽ xảy ra nếu tôi muốn lọc cái này, chỉ cho những cái kể từ một thời điểm cụ thể?

Tôi sẽ sử dụng Get-Date để lấy ngày và giờ hiện tại. Tôi sẽ gói nó trong dấu ngoặc tròn và sử dụng AddYears của nó phương pháp tìm một năm trước. Trong thế giới thực, tôi có xu hướng sử dụng AddDays , nhưng tôi muốn nhận được một số kết quả.

Và tôi sẽ lọc $configfilelist bằng cách chuyển vào Where-Object (ngoại trừ việc tôi sẽ sử dụng một phím tắt thuận tiện là dấu chấm hỏi). Bộ lọc của tôi nằm bên trong dấu ngoặc nhọn (‘dấu ngoặc nhọn’, phải không?) Và bên trong dấu ngoặc nhọn đó, tôi đề cập đến những thứ trong $configfilelist sử dụng $_ .

Vì vậy, bộ lọc của tôi giống như thế này, nói rằng tôi muốn liệt kê những bộ lọc có LastWriteTime lớn hơn (-gt ) một năm trước đây:

Và tôi chỉ nhận được một tập tin. Khủng khiếp.

Tất cả đều tốt và tốt, nhưng bây giờ tôi muốn biết cài đặt đó là gì. Để làm được điều đó, chúng ta cần xem xét bên trong tệp. Get-Content là bạn của chúng tôi ở đây. Hãy bắt đầu bằng cách sử dụng Get-Content chống lại một tập tin trực tiếp. Sẽ rất dễ dàng để đưa nó vào lệnh thích hợp của chúng ta sau này.

Get-Content thực sự trả về một mảng các dòng và có các tham số thực sự hữu ích như -TotalCount dừng sau một số dòng nhất định hoặc -Tail lấy các dòng ở cuối tệp. Tôi thích điều này khi xử lý các tệp lớn - không giống như tôi có thể mở chúng trong Notepad.

Để tôi kể cho bạn nghe về Chuỗi chọn quá. Nó giống như grep từ Unix - bạn sử dụng nó để lấy các dòng bạn muốn trong một tệp.

Đầu ra đó có vẻ như là một khó khăn, nhưng hãy nhớ rằng đây chỉ là biểu diễn chuỗi của một đối tượng. Nếu tôi đặt lệnh của mình vào gm (Get-Member ), bạn sẽ hiểu ý tôi.

Vì vậy, bây giờ tôi có thể nói rằng tôi có thể truy cập Path của tệp, Line , LineNumber , v.v., một cách riêng biệt.

Để tìm kiếm nhiều thứ, tôi muốn chuyển một mảng tham số cho -Pattern . Tôi làm điều đó chỉ bằng cách sử dụng dấu phẩy, để phát hiện ra rằng đó là một bản cài đặt Dịch vụ phân tích.

Hy vọng rằng bạn đang bắt đầu thấy sức mạnh của điều này.

Tôi có thể đưa tất cả vào một dòng bằng cách sử dụng:

dir -rec -inc ConfigurationFile.ini | ? {$_.LastWriteTime -gt (Get-Date).AddYears(-1)} | select-string -Pattern 'FEATURES=','ACTION=' | select-object Path, Line

(Xin lỗi, bạn có thể sẽ phải cuộn sang bên để xem tất cả những điều đó - nhận mọi thứ trên một dòng không hẳn là một đức tính tốt trong HTML.)

Khi bạn đang giải quyết những việc mà bạn muốn, bạn sẽ muốn lưu trữ các lệnh ở đâu đó để sử dụng sau này (chẳng hạn như trong tệp .ps1 mà bạn chạy). Vì vậy, bạn muốn biết về Get-History . Nó liệt kê mọi thứ bạn đã chạy trong phiên đó.

Và một mẹo nhỏ gọn gàng là bạn có thể sử dụng số âm để móc vào các mảng từ đầu bên kia. Vì vậy, bạn có thể làm điều này:

Nhưng thay vì chỉ hiển thị nó, hãy chuyển nó vào clip :

… Đưa nó vào khay nhớ tạm.

Tôi sẽ không đi xa hơn với vấn đề này, nhưng bạn có thể tiếp tục thúc đẩy điều này ngày càng xa hơn, khám phá những loại điều có thể thú vị trong công việc của bạn. Bạn có thể kết xuất kết quả vào tệp bằng cách sử dụng > và nối vào các tệp bằng >> .

Bây giờ hãy xem xét các lệnh như:

Get-EventLog -LogName Application -After (Get-Date).AddHours(-1) -EntryType Error

… Và tưởng tượng bạn có thể làm gì với điều đó.

Hãy thử làm:Import-Module SQLServer

Sau đó, bạn sẽ đi:

cd SQLSERVER:

Và duyệt qua môi trường SQL như thể nó là một hệ thống tệp.

Tôi phải thừa nhận rằng tôi không có xu hướng sử dụng PowerShell để khám phá SQL như thế này. Nhưng thực tế là tôi chắc chắn có thể cung cấp cho tôi một loạt các lựa chọn. Thực tế là tôi có thể sử dụng PowerShell để tạo tài liệu Word giống như họ đã làm tại https://learn-powershell.net/2014/12/31/beginning-with-powershell-and-word/ hoặc gửi email như được mô tả tại https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage hoặc gọi các dịch vụ web (bao gồm Azure Machine Learning) như được mô tả tại https://docs.microsoft .com / en-gb / powershell / module / Microsoft.PowerShell.Utility / Invoke-WebRequest có nghĩa là với một chút trí tưởng tượng, bạn có thể sử dụng PowerShell để làm bất cứ điều gì bạn muốn. Tôi thích sử dụng Invoke-SqlCommand để lấy dữ liệu ra khỏi SQL, đẩy nó vào Invoke-WebRequest để nhận điểm từ Azure ML, và sau đó trả lời tương ứng. PowerShell làm cho nó thực sự đơn giản.

Ồ, và để chạy các lệnh PowerShell trên các máy khác (tất nhiên có thể khá hữu ích), một 'tìm kiếm trên internet' nhanh chóng đã cho tôi thấy trang hữu ích này:https://www.howtogeek.com/117192/how-to -run-powershell-Lệnh-trên-máy tính từ xa /

Bạn có thể có một danh sách các máy tính bên trong một tệp và lặp qua nó như sau:

Hãy thử một số thứ. Tự rút khỏi. Và khám phá những gì mọi người đang viết cho T-SQL vào thứ Ba tháng này, được tổ chức bởi Rob Sewell (@sqldbawithbeard)

@rob_farley


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xu hướng cơ sở dữ liệu năm 2019 - SQL so với NoSQL, Cơ sở dữ liệu hàng đầu, Sử dụng một cơ sở dữ liệu so với Nhiều cơ sở dữ liệu

  2. Cài đặt WordPress bằng WP-CLI

  3. SQL Cheat Sheet:SQL, SQL Commands và SQL Injection là gì

  4. Blockchain:Nó là gì, nó hoạt động như thế nào và nó có ý nghĩa gì đối với dữ liệu lớn

  5. Tham gia với chúng tôi ở Las Vegas để có SQLintersection và tiết kiệm $ 100