0
  • Multiple SSH keys settings for different GitHub accounts
  • GitHub / SSH with multiple identities; the slightly-more
  • Multiple SSH keys support by ybiquitous
  • Multiple GitHub Accounts Using Different SSH keys
  • Multiple SSH keys for different GitHub accounts
  • Github Kills Search After Hundreds of Private Keys Exposed
  • Stop SSH brute force attempts
  • Plone / List plone-cvs Archives
  • Managing deploy keys - GitHub Docs
  • Ssh - Using the same github account from multiple PCs
  • Git - How do I use multiple SSH keys on GitHub?
  • Best way to use multiple SSH private keys on one client
  • Why use dedicated SSH keys for different hosts (like GitHub)
  • Reviewing your SSH keys - GitHub Docs
  • Multiple SSH keys for multiple Bitbucket/GitHub accounts
  • Multiple SSH keys and Github users
  • SSH Essentials: Working with SSH Servers, Clients, and Keys
  • A Tale of Two GitHubs: A Practical Guide
  • Multiple GitHub Accounts & SSH Config - Stack Overflow
  • Git config with multiple identities and multiple ...
1

Public SSH keys can leak your private infrastructure: netsec

Add support for multiple ssh keys #2348

Do you use some kind of ssh-agent? If you don't have an SSH key, follow the steps on Set up an SSH key. Link related issues or pull requests. Yes it does support multiple keys.

2

Keygen use Multiple SSH keys for git repositories in Ubuntu

How to Use GPG to Sign your Commits on Github, Gitlab, Bitbucket. Lg x130 driver win7 activator. GitHub offers private repos so I can't understand why keys are all public by default. Capital city in Montevideo, Uruguay Montevideo Former colonial name: The Loyal and Reconqu.

Patch managing SSH keys in metadata

Berkeley Electronic Press Selected Works.

3

Github + Multiple Repository SSH Deploy Keys - Justin Silver

Multiple SSH keys for different github accounts. They must stay private (on your server, in your home folder). Tuto crack crysis 3 https://zlatdetki.ru/forum/?download=3278. And there are companies like Github and Bitbucket that provides us an interface to manage our git repositories remotely.

Multiple simultaneous ssh tunnel db connections ...

Cybermotion 3d designer 14 keygen click here for more. Remote Desktop Protocol server View on GitHub View xrdp releases View xorgxrdp releases Overview. I never tried GitHub's client because I was already using. Tems software crack for gta visit here.

4

Serial key kubernetes Secrets Syncing #7364

So if you have repo1 and repo2 for example, I would name the keys github_repo1 and github_repo2. GitHub recommends using a single account, according to their website[0]. You can add multiple SSH keys for each system or workspace that you use. For unlocking keys that are locked with a passphrase, it obviously needs to know these passphrases.

Activation code 5 Linux / Unix Commands For Connecting To The Serial

Multiple ssh keys github. Ruby hack ragnarok valkyrie uprising special info. Pay extra attention to where you save the Private Key, because if anyone steals this key it can perform logins to your server without the need to enter a password. Subway surfers london unlimited keys and coins.

5

Git - GitHub SSH Key claiming it is not used - Stack Overflow

Ultraedit 14 keygen site. Refer to this link for step by step information. How to setup multiple ssh keys for your github Oct 22, The problem we faced usually when you deal with version control, is that, you probably have multiple github accounts and want to maintain various repositories accordingly. CentOS 7 – Ansible Host (DB Server) – 192.

Newest 'github' Questions - Information Security Stack

This one SSH key is your default identity because it's the key that Bitbucket checks first when authenticating. There are two ways to handle SSH keys on a YubiKey, in fact. Smurfs village hack no jailbreak ifunbox classic. Serial number cyberlink powerdirector 10.

6

How to anonymously host the continued development of youtube-dl offshore

Original sources of this guide (might be more up to date in case you're viewing a mirror of it):
https://old.reddit.com/youtubedl/comments/jktx5b/how_to_anonymously_host_the_continued_development/
https://raddle.me/f/AntiCopyright/121477/how-to-anonymously-host-the-continued-development-of-youtube
In this guide I will go through how to anonymously host the continued development of youtube-dl offshore using companies that have a track record of being very resilient to DMCA takedowns. As a general disclaimer, youtube-dl is not illegal, no matter how much the RIAA wants it to be. Hosting it is not illegal, but the RIAA doesn't care about what's legal, so we'll have to act accordingly and not rely on companies that will bend over backwards for them. This post is basically my way of flipping the bird to the RIAA.
DMCA ignored hosting providers
RIAA report including DMCA ignored hosting providers
United States Trade Representative report including DMCA ignored hosting providers
ESA report including DMCA ignored hosting providers
MPAA report including DMCA ignored hosting providers
Europol report including DMCA ignored hosting providers
Former bulletproof hosting reseller reviews offshore hosting providers
Former bulletproof hosting reseller on what the most warez friendly hosting providers are
(Novogara aka Ecatel recently got busted for tax evasion and are shady as hell in general, allowing anything to be hosted on their servers, so its best to stay away from them.)
Take into account what data center the hosting provider uses. If they don't run their their own data center the company running the data center can shut down the server if the data center isn't DMCA ignored. That isn't to say that resellers can't be resilient, but it depends on how resilient the data center they use is.
Some countries like Ukraine, Kazakhstan, and Korea force hosting providers to use government SSL certificates, meaning that they can MITM the connection.
If anyone here is serious about hosting the continuation of the youtube-dl project, PM me (F_the_RIAA_2 on Reddit, FuckTheRIAA on Raddle) and I'll give you a more specific recommendation. Keeping the hosting provider secret makes it a lot harder to take down.
CDNs and proxies to hide the real hosting provider
DDoS-Guard - Highly recommended. Based in Russia. Doesn't care about DMCA at all. Currently provides protection for Nyaa (the world's largest public torrent tracker for anime and manga) and Sci-Hub (the world's largest piracy website for academic papers which is under constant legal pressure from big US publishers). Has a free plan and accepts Bitcoin for paid plans. DDoS-Guard might be inaccessible outside of Europe for a few hours/month, meaning that sites using it would be unreachable outside of Europe during that time. This is probably peering related, but I'm not sure. Just tell site visitors to use ProtonVPN's free plan and connect to one of their VPN servers in the Netherlands if that happens.
While I recommend DDoS-Guard, I'll list some other alternatives in case something happens:
CloudFlare - Might be a honeypot, especially since I'm not sure how they'd be able to get away with this otherwise, but CloudFlare works for now. Just don't expect privacy from them. They're a US based company so they'll probably be reigned in eventually, but for now they're having their Wild West days. CloudFlare has a free plan. If CloudFlare is not configured properly when set up the real hosting provider will be leaked. More info about that here: 1, 2, 3, 4, 5, 6, 7
It's a myth that Cloudflare does not forward DMCA complaints, they forward everything. However, Cloudflare does not store any "sensitive data", which means forwarding "useless" information is similar like ignoring the DMCA request. A general advice is that whenever you use Cloudflare you should use a bulletproof backend server as well to avoid DMCA takedown request in the first place, so less or nothing gets forwarded (less "leakage risk").
Source: CHEF-KOCH / Warez / Bulletproof Hosting.md
OVPN's public IPv4 proxy (the Switzerland proxy) - Swedish company that provided a proxy for The Pirate Bay for a while, went to court because of it, and won. The two advantages with their Switzerland proxy in particular is that it's hosted by Interxion - the same Netherlands based company that is hosting Feral Hosting's DMCA ignored seedboxes - and that Switzerland is a pretty good jurisdiction. OVPN also scores well on That One Privacy Site. Accepts Bitcoin.
Before we go into registering a domain, I think it's worth considering if it's really worth keeping the name youtube-dl or if it could be spun off into a more accurate and less trademark infringing name like media-dl, for example. It downloads video and audio from a lot more sites than just YouTube, after all.
Resilient TLDs (there are more options than just these)
.is - As of a few years ago ISNIC had only ever suspended one domain and it was connected to ISIS.
When we asked whether ISNIC would follow Greenland’s lead and move for a proactive suspension, we got a clear answer.
“The short answer is no. Such an action would require a formal order from an Icelandic court. ISNIC is not responsible for a registrant’s usage of their domains,” ISNIC’s Marius Olafsson told TorrentFreak.
“This policy applies equally to any .is domain,” Olafsson says, adding that it’s the domain owner’s responsibility to abide by the law, not theirs.
Source: https://torrentfreak.com/pirate-bay-finds-safe-haven-in-iceland-switches-to-is-domain-130425/
“Domains can hardly be considered illegal any more than a street address. A street address is not illegal even if there is illegal activity in one apartment at the address,” ISNIC says.
Source: https://torrentfreak.com/torrent-domain-suspensions-damage-credibility-registrar-says-140617/
.to - Used by a lot of torrent and other filesharing websites. I have never seen one get suspended.
.ru / .su - Good for anything that doesn't affect Russia or go against Russian interests.
.cr is a resilient TLD according to the International Intellectual Property Alliance's (IIAP) report:
thepiratebay.cr domain is still online despite actions against it from the Internet Corporation for Assigned Names and Numbers (ICANN) and the U.S. Embassy in Costa Rica. Other notorious infringing sites are following the trend of using .cr domains as a safe haven (e.g., kickasstorrents.cr). Costa Rica’s failure to deal effectively with its obligations regarding online infringement, more than eight years after they came into force under DR-CAFTA, is a serious concern.
In case you want cheaper options that are available on Njalla, .ch and .ws are said to be pretty good.
.ec is also looking pretty solid as Library Genesis (the world's largest book piracy website, which is under constant legal pressure from big US publishers) have been using it for some time without getting suspended.
Vulnerable TLDs
.com, .net, .cc, .tv, and .name are operated by VeriSign, a Washington DC based company that is controlled by the US government.
.org, .info, .asia, .aero, .ag, .bz, .gi, .hgn, .in, .lc, .me, .mobi, .mn, .sc and .vc are operated by Afilias, a company that blocked one of WikiLeaks' domains.
.site, .website, .tech, .online, .uno, .fun, .space, .store, and .press are operated by Radix, a company that has an anti-piracy partnership with the MPAA.
All TLDs operated by Donuts, a company that has an anti-piracy partnership with the MPAA.
Resilient domain registrars/resellers
Recommended:
Njalla - As anonymous as you can get when buying a domain. Njalla is a Nevis registered company that buys the more common domains from Canada based Tucows, which is pretty abuse friendly and some TLDs like .is they buy from the registry directly. They then lease it to you while legally speaking they own the domain. This means that you don't have to give them any personal information to register it and they take Monero. Njalla has a Tor Hidden Service, PGP key, and has support for registration via XMPP with OTR. Njalla is run by one of the Pirate Bay founders and they kept the Pirate Bay sense of humor alive when dealing with DMCA.
Other:
NiceVPS - As anonymous as you can get when buying a domain. NiceVPS is a domain reseller based in the Dominican Republic that buys the domain from easyDNS and then leases it to you, meaning that you don't have to provide any personal information since they own the domain on paper. Accepts Monero. Has a Tor Hidden Service, PGP key, and warrant canary. I've seen NiceVPS recommended on some websites, but I'm not sure how solid it is. Doesn't seem to offer all of the TLDs that Njalla, Openprovider, and easyDNS offer, including a lot of the more resilient ones.
Openprovider aka Hosting Concepts B.V. - Netherlands based registrar that is one of the most abused registrars by rogue pharma sites. Doesn't suspend domains without a WIPO decision or court order. Has a full section dedicated to it in the United States Trade Representative's 2019 report and a brief mention in the 2020 report.
easyDNS - Canada based registrar that has a big focus on due process. The current registrar of The Pirate Bay's .org domain, which it defended against the RIAA. Wouldn't suspend a domain for a video downloader like youtube-dl unless ordered by ICANN, CIRA, or a court according to their takedown policy. Accepts Bitcoin.
There are a few resellers of bulletproof Russian and Chinese registrars that accept cryptocurrency, but because those are pretty much only used by cyber criminals they would not be a good look for this project. And there's also the risk that they'll just be gone one day without a word and no way to transfer domain and not much recourse. Because of those reasons I'm omitting them from this list. I think the above mentioned registrars and resellers will be good enough, the project is legal after all.
Worth considering:
In order to anonymously directly register a domain at any of the other mentioned services than Njalla and NiceVPS you'd have to fake the WHOIS information, which violates ICANN's rules and registrars usually suspend domains because of that. I could especially imagine easyDNS doing this. Not sure how the other registrars would react to that, but ICANN does have the power to withdraw their accreditation - meaning that the registrars would lose the ability to issue domains - if they don't follow ICANN's rules. In the cases of Njalla and NiceVPS they aren't a registrar, they just fill in their own details and buy the domain for you from a registry/registrar when you register a domain using them.
If you use Njalla or NiceVPS you're handing over control of the domain to somebody else and have to take their word for it that you'll always have access to the domain. It's easier to trust Njalla than NiceVPS in this case since it's known who owns Njalla and they have more of a track record than NiceVPS, which is fairly unknown.
TLS/SSL
Let's Encrypt - Free, uses open source software, backed by EFF, Mozilla, and others. Easy to set up and easy to maintain with an auto-renewal script.
If you're using CloudFlare, you'll have to use their phony SSL certificate.
Keeping your server secure and other technical advice
Check your server, and how reliable it is in terms of security and privacy, online services like https://centminmod.com can test your server and it's configuration to ensure nothing is "leaking".
Check if someone can see your hidden backend server IP via https://dnsdumpster.com. In general you should block every IP connection to your backend server, only allow your own connection, VPN's or reverse proxies. You quickly can check if someone has an "open" backend IP service via services like https://censys.io.
Source: CHEF-KOCH / Warez / Bulletproof Hosting.md
If you use CloudFlare, also check that your backend isn't leaking using CrimeFlare.
If you have set up email with your domain, use SMPT and a custom mail server so it doesn't leak your origin server IP. Email is the easiest way to leak origin server IP addresses.
Use SSH instead of VNC. With VNC the login information is sent unencrypted via plaintext, meaning that a rogue exit node in the Tor network and any server the login information is sent over on the clearnet could record your login information if they wanted to.
Use a password generator for all accounts and have it set to the max number of characters. Don't put the login information into a proprietary password manager or an online password manager. Make sure to back up the login information to multiple hard drives/SSDs/USBs/etc.
Try and make the site portable so that all software and all configurations can be saved to an ISO that can be spun up at any hosting provider at a moment's notice in case the site has to move at some point.
If you get a VPS, make sure it's KVM. KVM is much more secure than OpenVZ since OpenVZ doesn't have much separation between different customers on the same server. OpenVZ is also easy to oversell. Xen is also secure, but has worse performance than KVM.
Use nginx, it has a lot better performance than Apache.
Use MariaDB. It's a more up to date fork of MySQL developed by MySQL's original developer after he sold MySQL to Oracle. Contains bug fixes that sometimes have not gotten into MySQL yet. It is of course fully compatible with MySQL databases.
Basic security hardening (I'd probably use OSSEC + Shorewall instead of fail2ban and ufw, but I'm not an expert at this ¯\_(ツ)_/¯ )
nginx SSL/TLS hardening
Let's Encrypt auto-renewal script
If you need FTP server software, Pure-FTPd is the most secure option. Use SFTP instead of FTPS for better security and less of a headache.
Disable password access for administration, require login using SSH key, and limit the number of login attempts.
Change default ports, like SSH. If anyone tries to access the default SSH port, have the firewall block them for a few hours.
Disable root login.
More security tips for SSH are available here. Don't implement port knocking though.
Disable nginx logging once everything is set up to protect user privacy and improve performance.
Keep the software up to date to decrease the risk of your serveVPS being hacked.
Don't use analytics. If you have to, self-host Matomo (formerly known as Piwik). It's open source.
Keep up to date backups of the site on multiple hard drives/SSDs/etc.
Anonymous payments
Bitcoin is fully traceable nowadays and tumbling/mixing your Bitcoin won't make any difference.
Tumblers are useless
Against my better judgement, I’m going with this click bait heading, but the premise is correct. Due to the software running real time analysis on the ledger, simply avoiding taint and breaking up coins is now entirely ineffective, as it matches the full bitcoin amount to be received over a period of time, as the software is built around a neural net of sorts (talking out of school here, I’m not a programmer) it appears to self-correct in real time as a more "likely" or "accurate" owner conclusion is reached.
Source: Blockchain Analysis and Anti-Money Laundering (X-post from /DarknetmarketsOz)
Meanwhile Monero was the only cryptocurrency that that the US government couldn't track when they took down one of one of the biggest darknet drug markets and seized the site operator's cryptocurrencies. This is because Monero is the only major cryptocurrency properly designed to be private.
Update:
There has apparently been some recent developments when it comes to tracing Monero. You can read more about it in my comment on Reddit or Raddle. I wouldn't worry too much about it at this stage though.
Use I2P or Tor when transacting with cryptocurrency. I2P has some privacy benefits in its design over Tor:
Unidirectional tunnels instead of bidirectional circuits, doubling the number of nodes a peer has to compromise to get the same information. Protection against detecting client activity, even when an attacker is participating in the tunnel, as tunnels are used for more than simply passing end to end messages (e.g. netDb, tunnel management, tunnel testing) Tunnels in I2P are short lived, decreasing the number of samples that an attacker can use to mount an active attack with, unlike circuits in Tor, which are typically long lived. I2P APIs are designed specifically for anonymity and security, while SOCKS is designed for functionality.
However, I2P doesn't have as much funding and reseach or as big of a developer community behind it. I2P's userbase is also a lot smaller than Tor's. A full comparison about that can be found here. Monero chose I2P over Tor.
More information about Monero + I2P/Tor is available here.
Either get cryptocurrency donations or use a peer-to-peer exchange that doesn't enforce KYC (Know Your Customer) to buy Monero or Bitcoin. Unlike centralized exchanges, private sellers on decentralized exchanges won't automatically submit all their data to the government. Even if you get all of the cryptocurrency via donations and it therefore has no connection to your real identity at all you should still anonymize it via Monero so that it can't be traced from the donation wallet to the hosting provider which you want to keep hidden.
Some private sellers on peer-to-peer exchanges won't require IDs, while some might require it. If nothing is mentioned, it's worth asking the seller before you send them any money. A few even accept cash meetups and cash by mail (watch out for being scammed or mugged though). LocalCoinSwap, LocalCryptos, and LocalMonero even has sellers that accept gift cards (which you could buy with cash in a physical store). However, most gift cards are only redeemable in the country they were bought in, making this an option that won't work outside of the countries the sellers are based in. The one exception to this that I know of are Steam Wallet gift cards, which work internationally.
From what I've read there are some centralized exchanges that don't require KYC, but at least some of them freeze funds if they think it seems suspicious (which I would imagine a Tor IP would fall under) and they refuse to release the funds until they have been provided with an ID.
If you decide to buy cryptocurrency using a normal payment method, a wire transfer would be the option that involves the least amount of companies getting the transaction info, though I don't think you'd have much recourse with getting your money back if you got scammed and paid via wire transfer.
Bitcoin ATMs may require ID and usually have surveillance cameras around them, but this may vary depending on where you live.
If you bought Bitcoin, use XMR.to to exchange it to Monero. If the service provider only accepts Bitcoin and not Monero, exchange the Monero back to Bitcoin so that the Bitcoin has been anonymized. Don't pay in Bitcoin without exchanging it to Monero and back first.
Prepaid cards usually require SMS verification and are sometimes limited to purchases within the country they were sold in, so be sure to read up on whatever card you're considering using. Vanilla Visa gift cards used to be the go to for VPN buyers back in the day since they only required putting a zip code into a website, but things change, so read up about activation requirements and international purchases for the card in your country before buying anything and if you get information from an unofficial source, try and make sure that it's at least somewhat recent. If SMS activation is required there are two options. One option is buying a push-button burner phone and a prepaid SIM card at a physical store using cash, activate it at a major public place and then once the prepaid card is activated shut off the phone and take out the SIM card and the battery. Another option is buying access to a dedicated number in the same country that you bought the card in at an online SMS inbox site using cryptocurrency (the free SMS inboxes that have shared phone number might be used up already). The catch 22 there is that you wouldn't have any cryptocurrency yet at this stage, so it's not really an option unless you figure something out that I wasn't able to think of. If the prepaid card can't do international purchases you could withdraw the money into an anonymously created PayPal account (requires SMS verification). Expect the prepaid card and PayPal account to almost certainly get frozen if you try to pay with it over Tor. The risk is lower when paying via a VPN IP, but it's still a notable risk, especially if it's a VPN server with lots of users and you can never verify that the VPN provider isn't logging you. An anonymously paid for self-hosted VPN on a dedicated IP address in the same country that you bought the prepaid card would be less likely to cause the card to get frozen. Just don't connect to that self-hosted VPN directly using your real IP address since your ISP would see that and since you would be the only user of that self-hosted VPN it would be directly identifying. You could use the prepaid card on public WiFi, but that will give out your general location and will give the WiFi network your IP address. It will also give the WiFi network your MAC address, so be sure to set the MAC address to be random (just search something like "[operating system] random mac address on wifi" on DuckDuckGo). Then there's the issue that most browsers other than Tor Browser, SecBrowser, and Bromite are bad combating browser fingerprinting. Sure you could also customize Firefox with arkenfox user.js (formerly known as ghacks-user.js) and a bunch of add-ons to combat all the different kinds of tracking, but you'll just make your browser more unique the more you modify it.
Anonymous Internet browsing
Use Tor when doing anything in connection with the site, including when using PuTTY and FileZilla. Verify the integrity of the Tor Browser installer using PGP before running it so that you know that it hasn't been tampered with. Use a bridge if you don't want your ISP/government to see that you're using Tor. Running Tor over a VPN may seem like a good idea, but even if the VPN provider really doesn't keep logs (which is impossible to verify) using Tor over VPN can make you easier to track since that makes the VPN service a permanent entry node [1][2][3][4] and there's also VPN fingerprinting. If Deep Packet Inspection (DPI) is a concern you can use Pluggable Transports [1][2] to disguise the Tor traffic. Keep Tor Browser up to date. Never run Tor Browser in full screen. That makes you more easily trackable as websites can detect the real resolution of your screen. Don't install any add-ons or plugins, that makes you a lot easier to track. If you have logged in and then logged out of a site it can link you to other accounts you have on the same site using session cookies if you login to those accounts without hitting the "New Identity" button to relaunch Tor Browser with a clean slate. Block JavaScript when the website doesn't require it, that's the closest thing you'll come to an ad blocker. Use the Hidden Service version of sites when available, that way your Internet traffic never goes onto the clearnet and it also adds three more proxies between you and the site's server for a total of six proxies.
Since you shouldn't use an ad blocker with Tor Browser it's important that you keep your operating system up to date to minimize the risk of getting infected in case you come across some malicious JavaScript via for example malvertising when you have JavaScript activated.
If you use Windows and don't want to switch to Linux (even though you can set up dual boot or just boot it from a USB without even having to install it on your computer), use a non-admin user account and have an admin account that you only use to authorize trusted software to run, that will mitigate 94% of critical Windows vulnerabilities. You can use a tool like W10Privacy to decrease the amount of tracking in Windows 10, just be sure that the tool you use is updated to match the latest version of Windows 10 or you might brick your OS.
Email
Use an end-to-end encrypted no logs email provider located outside of Five Eyes, Germany, Enemies of the Internet, and countries under surveillance - preferably ProtonMail - when signing up for all of those services. Use a different email address for anything not related to the administration of the website. ProtonMail has a Tor Hidden Service, but signing up for ProtonMail is only possible on the clearnet address, so you'd have to go into Tor Browser's privacy settings and change "Prioritize .onion sites when known" from "Always" to "Ask every time" when you register the ProtonMail account. Change it back to "always" once the registration is complete. And yes, it is possible to sign up for ProtonMail via Tor. It's not easy finding an exit node that hasn't gotten blocked yet, and you will most likely need a secondary anonymous email account on another email provider to send a verification code to, but it is possible. Don't try using a disposable email service, ProtonMail blocks pretty much all of them so you'll just waste time and will probably get your account frozen. Once you have made an account, go into Settings > Security and then wipe and disable the authentication logs. Once that's done - before you sign up for anything - log out and wait a while then log back in, just to see if their anti-fraud system decides to freeze your account or not.
If you go for a email provider other than ProtonMail, keep in mind that it has to be there for the long haul in order to be usable. If it suddenly shuts down without notice, you're pretty much shit out of luck. So try and go for one that has been around for a while and seems like it will continue to stick around.
Comparison of alternatives:
https://privacytools.io/providers/email/
https://www.safetydetectives.com/blog/email-comparison/#3
https://www.prxbx.com/email/
Other
Use a new username that you haven't used before.
Use end-to-end encryption for all private communications. ProtonMail has built-in end-to-end encryption between ProtonMail accounts. If you want to encrypt email with PGP when communicating with non-ProtonMail users follow this guide. That will allow you to import it into ProtonMail. Just remember that the subject line will not be encrypted by PGP. PGP/MIME gives out less metadata than PGP inline and is just better in general, so use PGP/MIME. For file transfers you can also use OnionShare if the receipient also uses Tor Browser or put the file(s) into a password protected .7z file using 7-Zip with the "Encrypt file names" option enabled + a password generator set to the max number of characters that you then upload to Disroot Upload. Be aware that the lufi software that Disroot Upload runs on keeps the filename visible after the file has been deleted. If you need an end-to-end encrypted pastebin, self-host PrivateBin or use Disroot's PrivateBin. Disroot uses a privacy respecting hosting provider and claim that they don't keep logs for services that don't require an account, such as Disroot Upload and Disroot's PrivateBin.
Use DuckDuckGo instead of Google. At least when doing work related to the site. It has a Tor Hidden Service that you can easily find by searching "duckduckgo onion" or "duckduckgo hidden service" on DuckDuckGo.
Rely on open source software and privacy respecting services when it comes to processing and storing data related to the site. PrivacyTools.io, awesome-privacy, AlternativeTo, and GitHub makes it easy to find privacy respecting alternatives.
Keep software on your devices up to date to decrease the risk of it being compromised by an exploit.
And yeah, I probably went pretty deep on some of the less relevant sections, but I thought it was best to include everything.
submitted by Fuck_the_RIAA to youtubedl

Hybrid [PowerShell/C#] Class Based Techniques

Greetings everybody. Forgot what my old Reddit account was so had to make a new one.
Decided to break out with some course curriculum that I'm likely to be offering shortly. Curriculum such as... a look into a new method of writing PowerShell scripts, etc. (It's probably not that new though... it's probably been around for a while)
I've been working on a utility in tandem of this service configuration script that BlackVipeMadBomb122 collaborated on, which can be found at github.com/madbomb122
MadBomb is a cool dude. I reworked a couple of his XAML samples... as I have been looking to build something that goes waaay farther than Wells Fargo... at going pretty far... with an idea.
I know what you're thinking... "That sounds pretty far..." (emphasis on the trailing dots because you're unsure whether to laugh or stare at these words in confusion...)
I know.
Check this out...
-------------
This is a pretty good way to follow up on a previous post I had talked about, where arrays of differing types have to have their bounds crossed, and you don't wanna miss one of em...
MadBomb's process was very heavy, and though he had runspacing and XAML working, he didn't have a way to inject updates or to add additional profiles without the tool already making them.
Hence, an idea that I had to templatize the XAML controls. And to get the current services. And to figure out whether a service was installed on a system and running.
It was taking about 20 seconds back in January. This above thing does this in like 300ms. The thing that was taking 20 seconds back in January... Now taking about 300 milliseconds.
Imagine if it only took 20 seconds to get to mars, not 30... And then, I show up and override quantum entanglement and am watching you do this thing that people used to do to get around... and had about 19,700 milliseconds to talk a massive amount of smack...
That's what this process above, does. Seemingly...
Of course, I'm attempting to entertain the reader, because, I'm not that arrogant, I'm just attempting to showcase what you could do with all of that free time that's available when you learn from someone that took something that once took about 20 seconds, and then managed to get that number down to like 300ms.
Microsoft... probably thinks that's a pretty cool thing you can do. They too, do this.

Allow me to break it down for anyone who wants to learn how it's done.
This code here is a class that's meant to capture the running services, and break each one down into relevant information. This isn't too dissimilar from PSCustomObject. It's like a hashtable, except it retains it's order.
Creating a new object, and THEN loading that template, accelerates this process
Class Service { [Int32] $Index [String] $Name [Bool] $Scope [Int32[]] $Slot [String] $StartMode [String] $State [String] $Status [String] $DisplayName [String] $PathName [String] $Description Service(){} Load([Int32] $Index , [String] $Name , [Bool] $Scope , [String] $Slot , [String] $StartMode , [String] $State , [String] $Status , [String] $DisplayName , [String] $PathName , [String] $Description ) { $This.Index = $Index $This.Name = $Name $This.Scope = $Scope $This.Slot = @( Invoke-Expression $Slot ) $This.StartMode = $StartMode $This.State = $State $This.Status = $Status $This.DisplayName = $DisplayName $This.PathName = $PathName $This.Description = $Description } } 
All of these properties except "Scope", and "Slot" are all standard bits of information that you get with the command "Get-Service". In this case, we're allowing the object to be instantiated with the parameterless constructor "Service(){}", and any amendments can be implemented with the "Load(){}".
The Invoke-Expression, will turn an input String[] array into an Int[].
In the above example, you're seeing a process that I like to call "banding"... which is, where the variables continue to roll onward and work as an engine. Clearing a block of variables, getting a block of variables, and then, setting a block of variables.
Whereby declaring the proper data types as you would do in C#.
Most people may not know that PowerShell IS C#... with some added punch and simplicity... Anyway...
Class QMark { [String] $PID QMark() { $This.PID = ( Get-Service *_* -EA 0 | ? ServiceType -eq 224 | Select-Object -First 1 ).Name.Split('_')[-1] } } 
This QMark just gets the code on the end of those Connected Device Protocol type services... it has to randomize these numbers each and every time you reboot your computer. You can't hardcode that into a script...
Below, is the template.
Class Template { [String] $Name = "FightingEntropy/ViperBomb" [String] $Version = "2020.08.0" [String] $Release = "Development" [String] $URL = "https://github.com/secure-digits-plus-llc/FightingEntropy" [String] $MadBomb = "https://github.com/madbomb122/BlackViperScript" [String] $BlackViper = "http://www.blackviper.com" [String] $Site = "https://www.securedigitsplus.com" [String[]] $Copyright = ("Copyright (c) 2019 Zero Rights Reserved;Services Configuration by Charles 'Black Viper' Sparks;;The MIT Licens" + "e (MIT) + an added Condition;;Copyright (c) 2017-2019 Madbomb122;;[Black Viper Service Script];Permission is her" + "eby granted, free of charge, to any person obtaining a ;copy of this software and associated documentation files" + " (the Software),;to deal in the Software without restriction, including w/o limitation;the rights to: use/copy/m" + "odify/merge/publish/distribute/sublicense,;and/or sell copies of the Software, and to permit persons to whom the" + ";Software is furnished to do so, subject to the following conditions:;;The above copyright notice(s), this permi" + "ssion notice and ANY original;donation link shall be included in all copies or substantial portions of;the Softwa" + "re.;;The software is provided 'As Is', without warranty of any kind, express;or implied, including but not limite" + "d to warranties of merchantibility,;or fitness for a particular purpose and noninfringement. In no event;shall t" + "he authors or copyright holders be liable for any claim, damages;or other liability, whether in an action of con" + "tract, tort or otherwise,;arising from, out of or in connection with the software or the use or;other dealings i" + "n the software.;;In other words, these terms of service must be accepted in order to use,;and in no circumstance" + " may the author(s) be subjected to any liability;or damage resultant to its use.").Split(";") [String[]] $About = ("This utility provides an interface to load and customize;service configuration profiles, such as:;; Default:" + " Black Viper (Sparks v1.0); Custom: If in proper format; Backup: Created via this utility").Split(";") [String[]] $Help = (("[Basic];;_-atos___Accepts ToS;_-auto___Automates Process | Aborts upon user input/errors;;[Profile];;_-default_" + "_Standard;_-safe___Sparks/Safe;_-tweaked__Sparks/Tweaked;_-lcsc File.csv Loads Custom Service Configuration, Fi" + "le.csv = Name of your backup/custom file;;[Template];;_-all___ Every windows services will change;_-min___ Just " + "the services different from the default to safe/tweaked list;_-sxb___ Skips changes to all XBox Services;;[Updat" + "e];;_-usc___ Checks for Update to Script file before running;_-use___ Checks for Update to Service file before r" + "unning;_-sic___ Skips Internet Check, if you can't ping GitHub.com for some reason;;[Logging];;_-log___ Makes a " + "log file named using default name Script.log;_-log File.log_Makes a log file named File.log;_-baf___ Log File of" + " Services Configuration Before and After the script;;[Backup];;_-bscc___Backup Current Service Configuration, Cs" + "v File;_-bscr___Backup Current Service Configuration, Reg File;_-bscb___Backup Current Service Configuration, Cs" + "v and Reg File;;[Display];;_-sas___ Show Already Set Services;_-snis___Show Not Installed Services;_-sss___ Show" + "Skipped Services;;[Miscellaneous];;_-dry___ Runs the Script and Shows what services will be changed;_-css___ Cha" + "nge State of Service;_-sds___ Stop Disabled Service;;[Experimental];;_-secp___Skips Edition Check by Setting Edi" + "tion as Pro;_-sech___Skips Edition Check by Setting Edition as Home;_-sbc___ Skips Build Check;;[Development];;_" + "-devl___Makes a log file with various Diagnostic information, Nothing is Changed;_-diag___Shows diagnostic infor" + "mation, Stops -auto;_-diagf__ Forced diagnostic information, Script does nothing else;;[Help];;_-help___Shows " + "list of switches, then exits script.. alt -h;_-copy___Shows Copyright/License Information, then exits script" + ";").Replace("_"," ")).Split(";") [Hashtable] $Type = @{ Names = @( "H" , "P" | % { "10$_`:D" } ; "S" , "T" | % { "DT:$_" } ; "LT:S" ) | % { "$_+" , "$_-" } Titles = @( "Home" , "Pro" | % { "Windows 10 $_ | Default" } ; "Safe" , "Tweaked" | % { "Desktop | $_" } ; "Laptop | Safe" ) | % { "$_ Max" , "$_ Min" } } [Hashtable] $Filter = @{ Xbox = ("XblAuthManager XblGameSave XboxNetApiSvc XboxGipSvc xbgm" -Split " ") NetTCP = ("Msmq Pipe Tcp" -Split " " | % { "Net$_`Activator" }) Skip = ("BcastDVRUserService DevicePickerUserSvc DevicesFlowUserSvc PimIndexMaintenanceSvc PrintWorkflowUserSvc Unistore" + "Svc UserDataSvc WpnUserService" -Split " " | % { "{0}_{1}" -f $_ , [QMark]::New().PID }) + ("AppXSVC BrokerInfra" + "structure ClipSVC CoreMessagingRegistrar DcomLaunch EntAppSvc gpsvc LSM MpsSvc msiserver NgcCtnrSvc NgcSvc RpcEp" + "tMapper RpcSs Schedule SecurityHealthService sppsvc StateRepository SystemEventsBroker tiledatamodelsvc WdNisSvc" + " WinDefend").Split(" ") | Sort } [String[]] $XamlNames = ("MenuConfigHomeDefaultMax MenuConfigHomeDefaultMin MenuConfigProDefaultMax MenuConfigProDefaultMin MenuConfigDesk" + "topSafeMax MenuConfigDesktopSafeMin MenuConfigDesktopTweakedMax MenuConfigDesktopTweakedMin MenuConfigLaptopSafe" + "Max MenuConfigLaptopSafeMin MenuInfoFeedback MenuInfoFAQ MenuInfoAbout MenuInfoCopyright MenuInfoMadBombDonate M" + "enuInfoMadBombGitHub MenuInfoBlackViper MenuInfoSecureDigitsPlus ServiceDialogSearch ServiceDialogSelect Service" + "DialogGrid ServiceDialogEmpty CurrentOS CurrentBuild CurrentChassis DisplayActive DisplayInactive DisplaySkipped" + " MiscSimulate MiscXbox MiscChange MiscStopDisabled DevelDiagErrors DevelLog DevelConsole DevelDiagReport BypassB" + "uild BypassEdition BypassLaptop LoggingServiceBrowse LoggingServiceFile LoggingScriptBrowse LoggingScriptFile Ba" + "ckupRegistryBrowse BackupRegistryFile BackupTemplateBrowse BackupTemplateFile ServiceProfile ServiceLabel Script" + "Profile ScriptLabel Start Cancel" ) -Split " " [Object] $Control Template() {} } 
This one below, is essentially a CSV file, but on crack or steroids or something... You can eliminate the time needed to import a CSV when you do what I did here. Such as, defying the laws of physics and entropy or whatnot... by just using a combination of regex splitting with mask insertion and... honestly, I'm sure that even many of the dudes at Microsoft will look at this... say to themselves... "what the hell...?", perhaps they too, may be quite confused on how the hell I did this...
Honestly, I don't know... wish I did. Just kidding... I stated in the previous paragraph how I did this.
Class Config { Hidden [String[]] $Names = (("AJRouter;ALG;AppHostSvc;AppIDSvc;Appinfo;AppMgmt;AppReadiness;AppVClient;aspnet_state;AssignedAccessManagerSvc;" + "AudioEndpointBuilder;AudioSrv;AxInstSV;BcastDVRUserService_{0};BDESVC;BFE;BITS;BluetoothUserService_{0};Browser;B" + "TAGService;BthAvctpSvc;BthHFSrv;bthserv;c2wts;camsvc;CaptureService_{0};CDPSvc;CDPUserSvc_{0};CertPropSvc;COMSysA" + "pp;CryptSvc;CscService;defragsvc;DeviceAssociationService;DeviceInstall;DevicePickerUserSvc_{0};DevQueryBroker;Dh" + "cp;diagnosticshub.standardcollector.service;diagsvc;DiagTrack;DmEnrollmentSvc;dmwappushsvc;Dnscache;DoSvc;dot3svc" + ";DPS;DsmSVC;DsRoleSvc;DsSvc;DusmSvc;EapHost;EFS;embeddedmode;EventLog;EventSystem;Fax;fdPHost;FDResPub;fhsvc;Font" + "Cache;FontCache3.0.0.0;FrameServer;ftpsvc;GraphicsPerfSvc;hidserv;hns;HomeGroupListener;HomeGroupProvider;HvHost;" + "icssvc;IKEEXT;InstallService;iphlpsvc;IpxlatCfgSvc;irmon;KeyIso;KtmRm;LanmanServer;LanmanWorkstation;lfsvc;Licens" + "eManager;lltdsvc;lmhosts;LPDSVC;LxssManager;MapsBroker;MessagingService_{0};MSDTC;MSiSCSI;MsKeyboardFilter;MSMQ;M" + "SMQTriggers;NaturalAuthentication;NcaSVC;NcbService;NcdAutoSetup;Netlogon;Netman;NetMsmqActivator;NetPipeActivato" + "r;netprofm;NetSetupSvc;NetTcpActivator;NetTcpPortSharing;NlaSvc;nsi;OneSyncSvc_{0};p2pimsvc;p2psvc;PcaSvc;PeerDis" + "tSvc;PerfHost;PhoneSvc;pla;PlugPlay;PNRPAutoReg;PNRPsvc;PolicyAgent;Power;PrintNotify;PrintWorkflowUserSvc_{0};Pr" + "ofSvc;PushToInstall;QWAVE;RasAuto;RasMan;RemoteAccess;RemoteRegistry;RetailDemo;RmSvc;RpcLocator;SamSs;SCardSvr;S" + "cDeviceEnum;SCPolicySvc;SDRSVC;seclogon;SEMgrSvc;SENS;Sense;SensorDataService;SensorService;SensrSvc;SessionEnv;S" + "grmBroker;SharedAccess;SharedRealitySvc;ShellHWDetection;shpamsvc;smphost;SmsRouter;SNMPTRAP;spectrum;Spooler;SSD" + "PSRV;ssh-agent;SstpSvc;StiSvc;StorSvc;svsvc;swprv;SysMain;TabletInputService;TapiSrv;TermService;Themes;TieringEn" + "gineService;TimeBroker;TokenBroker;TrkWks;TrustedInstaller;tzautoupdate;UevAgentService;UI0Detect;UmRdpService;up" + "nphost;UserManager;UsoSvc;VaultSvc;vds;vmcompute;vmicguestinterface;vmicheartbeat;vmickvpexchange;vmicrdv;vmicshu" + "tdown;vmictimesync;vmicvmsession;vmicvss;vmms;VSS;W32Time;W3LOGSVC;W3SVC;WaaSMedicSvc;WalletService;WarpJITSvc;WA" + "S;wbengine;WbioSrvc;Wcmsvc;wcncsvc;WdiServiceHost;WdiSystemHost;WebClient;Wecsvc;WEPHOSTSVC;wercplsupport;WerSvc;" + "WFDSConSvc;WiaRpc;WinHttpAutoProxySvc;Winmgmt;WinRM;wisvc;WlanSvc;wlidsvc;wlpasvc;wmiApSrv;WMPNetworkSvc;WMSVC;wo" + "rkfolderssvc;WpcMonSvc;WPDBusEnum;WpnService;WpnUserService_{0};wscsvc;WSearch;wuauserv;wudfsvc;WwanSvc;xbgm;XblA" + "uthManager;XblGameSave;XboxGipSvc;XboxNetApiSvc") -f [QMark]::New().PID ).Split(";") Hidden [Int32[]] $Masks = ("0;1;2;3;3;4;3;5;3;6;2;2;3;3;3;2;7;3;3;0;0;0;0;3;3;4;7;2;0;3;2;8;3;3;3;3;3;2;3;3;2;3;1;2;7;3;2;3;3;3;2;3;3;3;2;2" + ";1;3;3;3;2;3;1;2;3;3;6;3;3;1;1;3;3;9;0;1;3;3;2;2;1;3;3;3;2;3;1;0;3;3;1;11;2;2;0;3;3;0;0;3;2;2;3;3;2;1;2;2;7;3;3;" + "2;8;3;1;3;3;3;3;3;2;3;3;2;3;3;3;3;12;12;1;3;1;2;12;1;1;3;3;1;2;6;13;13;13;0;7;1;3;2;12;3;1;1;3;2;3;3;3;3;3;3;3;2" + ";13;3;0;2;3;3;3;2;3;12;5;3;0;3;2;3;3;3;6;1;1;1;1;1;1;1;1;14;3;3;3;2;3;3;3;3;3;3;2;0;3;3;0;3;3;3;3;13;3;3;2;1;1;1" + "5;3;3;3;1;3;1;1;3;2;2;7;7;3;3;1;3;1;1;3;1").Split(";") Hidden [String[]] $Values = ("2,2,2,2,2,2,1,1,2,2;2,2,2,2,1,1,1,1,1,1;3,0,3,0,3,0,3,0,3,0;2,0,2,0,2,0,2,0,2,0;0,0,2,2,2,2,1,1,2,2;0,0,1,0,1,0" + ",1,0,1,0;0,0,2,0,2,0,2,0,2,0;4,0,4,0,4,0,4,0,4,0;0,0,2,2,1,1,1,1,1,1;3,3,3,3,3,3,1,1,3,3;4,4,4,4,1,1,1,1,1,1;0,0" + ",0,0,0,0,0,0,0,0;1,0,1,0,1,0,1,0,1,0;2,2,2,2,1,1,1,1,2,2;0,0,3,0,3,0,3,0,3,0;3,3,3,3,2,2,2,2,3,3").Split(";") Hidden [Hashtable] $Order Hidden [Array] $Sort [Object] $Current = ( Get-CimInstance Win32_Service | Sort Name ) [Object] $Profile Config() { $This.Profile = @( ) $This.Order = @{ } ForEach ( $I in 0..( $This.Names.Count - 1 ) ) { $This.Order.Add($This.Names[$I],$I) } $This.Sort = $This.Values[$This.Masks] ForEach ( $I in 0..( $This.Current.Count - 1 ) ) { $X = $This.Current[$I] $Scope = $X.Name -in $This.Names $Slot = $This.Sort[@(-1,$This.Order[$X.Name])[[Int]$Scope]] $This.Profile += [Service]::New() $This.Profile[$I].Load( $I, $X.Name, $Scope, $Slot, $X.StartMode, $X.State, $X.Status, $X.DisplayName, $X.PathName, $X.Description ) } } } 
The Hidden access modifiers don't actually keep the object from being included, it just hides those properties/variables. It helps to engage this when you prefer that the output look as if it were shaped a certain way.
Here, ( Get-CimInstance Win32_Service | Sort Name ) is getting the total number of things we want to have control over for this template.
Any object that is in the profile will be amendable. Any object that is outside of the profile will be disabled. Each service that is detected sends it's information into the load function for the [Service]::New() object, which means that it's able to load the profile for each item it finds within the starting profile.
Class Control { [String] $PassedArgs = $Null [Int32] $TermsOfService = 0 [Int32] $DisplayActive = 1 [Int32] $DisplayInactive = 1 [Int32] $DisplaySkipped = 1 [Int32] $MiscSimulate = 0 [Int32] $MiscXbox = 1 [Int32] $MiscChange = 0 [Int32] $MiscStopDisabled = 0 [Int32] $DevelDiagErrors = 0 [Int32] $DevelLog = 0 [Int32] $DevelConsole = 0 [Int32] $DevelDiagReport = 0 [Int32] $BypassBuild = 0 [Int32] $BypassEdition = 0 [Int32] $BypassLaptop = 0 [String] $LoggingServiceFile = "Service.log" [String] $LoggingScriptFile = "Script.log" [String] $BackupRegistryFile = "Backup.reg" [String] $BackupTemplateFile = "Backup.csv" [String] $ServiceConfig = "Black Viper (Sparks v1.0)" [String] $ScriptConfig = "DevOPS (MC/SDP v1.0)" Control() { } } 
This here is strictly for setting default options and allowing them to be changeable, so that the chunk of XAML that I have to rewire to this work I'm showcasing, will be able to interact with it and be far more responsive.
Class ViperBomb { [Object] $Template [Object] $Config [Object] $Control ViperBomb() { $This.Template = [Template]::New() $This.Config = [Config]::New() $This.Control = [Control]::New() } } 
This is the class that takes all of those items and creates an object that is malleable as well as highly configurable and most importantly... accurate.
Fast, accurate, awesome, responsive, lightweight, not complex, easy to understand, easy to read... these are all key critical things in engineering the worlds best software.
It may come as no surprise, but guess where the world's best software engineering takes place...? One Microsoft Way, Redmond, WA.
Anyway...
$Model = [ViperBomb]::New() PS C:\Secure Digits Plus LLC\Project> $Model Template Config Control -------- ------ ------- Template Config Control PS C:\Secure Digits Plus LLC\Project> $Model.Template Name : FightingEntropy/ViperBomb Version : 2020.08.0 Release : Development URL : https://github.com/secure-digits-plus-llc/FightingEntropy MadBomb : https://github.com/madbomb122/BlackViperScript BlackViper : http://www.blackviper.com Site : https://www.securedigitsplus.com Copyright : {Copyright (c) 2019 Zero Rights Reserved, Services Configuration by Charles 'Black Viper' Sparks, , The MIT License (MIT) + an added Condition…} About : {This utility provides an interface to load and customize, service configuration profiles, such as:, , Default: Black Viper (Sparks v1.0)…} Help : {[Basic], , -atos Accepts ToS, -auto Automates Process | Aborts upon user input/errors…} Type : {Titles, Names} Filter : {Skip, NetTCP, Xbox} XamlNames : {MenuConfigHomeDefaultMax, MenuConfigHomeDefaultMin, MenuConfigProDefaultMax, MenuConfigProDefaultMin…} Control : 
I've yet to update some of the details, such as, it's not 2019 anymore, but that's BlackViper's original public domain release info I believe. MadBomb also.
Current Profile ------- ------- {Win32_Service: Active Directory Web Services (Name = "ADWS"), Win32_Service: AllJoyn Router Service (Name = "AJRouter"), Win32_Service: Application Layer Gateway Service (Name = "ALG"), Win32_Service: Application Identity (Name = "AppIDSvc")…} {ADWS, AJRouter… PS C:\Secure Digits Plus LLC\Project> $Model.Config.Profile Index : 0 Name : ADWS Scope : False Slot : {2, 2, 2, 2…} StartMode : Auto State : Running Status : OK DisplayName : Active Directory Web Services PathName : C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe Description : This service provides a Web Service interface to instances of the directory service (AD DS and AD LDS) that are running locally on this server. If this service is stopped or disabled, client applications, such as Active Directory PowerShell, will not be able to access or manage any directory service instances that are running locally on this server. 
So the output comes out like above. The reason I am showcasing all of this is because, this is ADDING information that you would get back, and allowing it to be sculptable/configurable.
If you'd like to see a video of how this process was working back in January... https://www.youtube.com/watch?v=hbBVNerI_Qk
Another video of that same utility... https://www.youtube.com/watch?v=CBMx6AmG30g
These (2) videos above don't have anything that I've done with this class based approach. I was attempting to get databinding to work with runspacing, however, I believe that approach is a very taxing approach, which is why I had to scrap the project multiple times because i couldn't get the responsiveness I wanted from the gui. Databinding would've solved that, but so did having a tightened Class based method.
Also, the search field box, that's sort of a pain in the neck to get to work as fast as I'd wanted... so.
I started looking for other ways to clean up the responsiveness, and this project was held on the backburner, so was the networking utility that I'd worked on, on that particular channel, from 6 months ago.
I'm likely to make a better and more consistent effort to post my work and examples, in the foreseeable future... based on demand for such a thing.

I meant to post this a few days ago, but I never got around to it. I am building course curriculum specifically tailored around DevOPS, and using PowerShell. https://drive.google.com/file/d/1UZSvYsgzijexjcJbNwoXcup2rPF6xc6Z/view?usp=sharing
The source code for that is here... https://drive.google.com/file/d/1q8YURdKd3QHDTS2kRWb4cAFqyiGM3dBK/view?usp=sharing
submitted by BFG20K to PowerShell